ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi93Yl9jcm9zc2Jhci52IGIvdmVyaWxvZy9ydGwvbGliL3diX2Nyb3NzYmFyLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViOGYyOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9jcm9zc2Jhci52CkBAIC0wLDAgKzEsMzk5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIE9NUyA4MDUxIGNvcmVzIGNvbW1vbiBsaWJyYXJ5IE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaS8gICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIE9NUyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gIFJldmlzaW9uIDogTm92IDI2LCAyMDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLy8vLyAgICAgIHYtMC4wIC0gRGluZXNoLkEsIE5vdiAyNiwgMjAxNg0KKy8vLy8gICAgICAgICAgMS4gSW5pdGlhbCBWZXJzaW9uDQorLy8vLyAgICAgIHYtMC4xIC0gRGluZXNoLkEsIEphbiAxOSwgMjAxNw0KKy8vLy8gICAgICAgICAgMS4gTGludCB3YXJuaW5nIGZpeGVzLCBTZXBlcmF0ZWQgcmVzZXRhYmxlIGFuZCBub24gDQorLy8gICAgICAgICAgICAgICByZXNldGFibGUgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLw0KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8NCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vDQorLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vDQorLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLw0KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8NCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vDQorLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vDQorLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLw0KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8NCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vDQorLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLw0KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgV2ViLWJvbmUgY3Jvc3MgYmFyIE0tTWFzdGVyIEJ5IFMtU2xhdmUNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK21vZHVsZSB3Yl9jcm9zc2JhciAoDQorDQorICAgICAgICAgICAgICByc3RfbiAgICAgICAgICAgICAgICwgDQorICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgICAgICwNCisNCisNCisgICAgLy8gTWFzdGVyIEludGVyZmFjZSBTaWduYWwNCisgICAgICAgICAgICAgIHdiZF90YWRkcl9tYXN0ZXIgICAgLA0KKyAgICAgICAgICAgICAgd2JkX2Rpbl9tYXN0ZXIgICAgICAsDQorICAgICAgICAgICAgICB3YmRfZG91dF9tYXN0ZXIgICAgICwNCisgICAgICAgICAgICAgIHdiZF9hZHJfbWFzdGVyICAgICAgLCANCisgICAgICAgICAgICAgIHdiZF9iZV9tYXN0ZXIgICAgICAgLCANCisgICAgICAgICAgICAgIHdiZF93ZV9tYXN0ZXIgICAgICAgLCANCisgICAgICAgICAgICAgIHdiZF9hY2tfbWFzdGVyICAgICAgLA0KKyAgICAgICAgICAgICAgd2JkX3N0Yl9tYXN0ZXIgICAgICAsIA0KKyAgICAgICAgICAgICAgd2JkX2N5Y19tYXN0ZXIgICAgICAsIA0KKyAgICAgICAgICAgICAgd2JkX2Vycl9tYXN0ZXIgICAgICAsDQorICAgICAgICAgICAgICB3YmRfcnR5X21hc3RlciAgICAgICwNCisgDQorICAgIC8vIFNsYXZlIEludGVyZmFjZSBTaWduYWwNCisgICAgICAgICAgICAgIHdiZF9kaW5fc2xhdmUgICAgICAgLCANCisgICAgICAgICAgICAgIHdiZF9kb3V0X3NsYXZlICAgICAgLA0KKyAgICAgICAgICAgICAgd2JkX2Fkcl9zbGF2ZSAgICAgICAsIA0KKyAgICAgICAgICAgICAgd2JkX2JlX3NsYXZlICAgICAgICAsIA0KKyAgICAgICAgICAgICAgd2JkX3dlX3NsYXZlICAgICAgICAsIA0KKyAgICAgICAgICAgICAgd2JkX2Fja19zbGF2ZSAgICAgICAsDQorICAgICAgICAgICAgICB3YmRfc3RiX3NsYXZlICAgICAgICwgDQorICAgICAgICAgICAgICB3YmRfY3ljX3NsYXZlICAgICAgICwgDQorICAgICAgICAgICAgICB3YmRfZXJyX3NsYXZlICAgICAgICwNCisgICAgICAgICAgICAgIHdiZF9ydHlfc2xhdmUNCisgICAgICAgICApOw0KKw0KK3BhcmFtZXRlciBXQl9TTEFWRSAgID0gNCA7DQorcGFyYW1ldGVyIFdCX01BU1RFUiAgPSA0IDsNCisNCitwYXJhbWV0ZXIgRF9XRCAgICA9IDE2OyAvLyBEYXRhIFdpZHRoDQorcGFyYW1ldGVyIEJFX1dEICAgPSAyOyAgLy8gQnl0ZSBFbmFibGUNCitwYXJhbWV0ZXIgQURSX1dEICA9IDI4OyAvLyBBZGRyZXNzIFdpZHRoDQorcGFyYW1ldGVyIFRBUl9XRCAgPSA0OyAgLy8gVGFyZ2V0IFdpZHRoDQorDQoraW5wdXQgICAgICAgICAgICAgICAgICBjbGs7IC8vIENMS19JIFRoZSBjbG9jayBpbnB1dCBbQ0xLX0ldIGNvb3JkaW5hdGVzIGFsbCBhY3Rpdml0aWVzIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGludGVybmFsIGxvZ2ljIHdpdGhpbiB0aGUgV0lTSEJPTkUgaW50ZXJjb25uZWN0LiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIFdJU0hCT05FIG91dHB1dCBzaWduYWxzIGFyZSByZWdpc3RlcmVkIGF0IHRoZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlzaW5nIGVkZ2Ugb2YgW0NMS19JXS4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbCBXSVNIQk9ORSBpbnB1dCBzaWduYWxzIG11c3QgYmUgc3RhYmxlIGJlZm9yZSB0aGUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpc2luZyBlZGdlIG9mIFtDTEtfSV0uIA0KK2lucHV0ICAgICAgICAgICAgICAgICAgcnN0X247IC8vIFJTVF9JIFRoZSByZXNldCBpbnB1dCBbUlNUX0ldIGZvcmNlcyB0aGUgV0lTSEJPTkUgaW50ZXJmYWNlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0LiBGdXJ0aGVybW9yZSwgYWxsIGludGVybmFsIHNlbGYtc3RhcnRpbmcgc3RhdGUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hY2hpbmVzIHdpbGwgYmUgZm9yY2VkIGludG8gYW4gaW5pdGlhbCBzdGF0ZS4gDQorDQoraW5wdXQgWyhXQl9NQVNURVIgKlRBUl9XRCktMTowXSB3YmRfdGFkZHJfbWFzdGVyOyAvLyB0YXJnZXQgYWRkcmVzcyBmcm9tIG1hc3RlciANCitpbnB1dCBbV0JfTUFTVEVSLTE6MF0gIHdiZF9zdGJfbWFzdGVyOyAgDQorICAgICAgICAgICAgICAgICAgICAvLyBTVEJfTyBUaGUgc3Ryb2JlIG91dHB1dCBbU1RCX09dIGluZGljYXRlcyBhIHZhbGlkIGRhdGEgDQorICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlciBjeWNsZS4gSXQgaXMgdXNlZCB0byBxdWFsaWZ5IHZhcmlvdXMgb3RoZXIgc2lnbmFscyANCisgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBpbnRlcmZhY2Ugc3VjaCBhcyBbU0VMX08oNy4uMCldLiBUaGUgU0xBVkUgbXVzdCANCisgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydCBlaXRoZXIgdGhlIFtBQ0tfSV0sIFtFUlJfSV0gb3IgW1JUWV9JXSBzaWduYWxzIGluIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgdG8gZXZlcnkgYXNzZXJ0aW9uIG9mIHRoZSBbU1RCX09dIHNpZ25hbC4gDQorb3V0cHV0IFtXQl9TTEFWRS0xOjBdICB3YmRfc3RiX3NsYXZlOyAgDQorICAgICAgICAgICAgICAgICAgICAvLyBTVEJfTyBUaGUgc3Ryb2JlIG91dHB1dCBbU1RCX09dIGluZGljYXRlcyBhIHZhbGlkIGRhdGEgDQorICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlciBjeWNsZS4gSXQgaXMgdXNlZCB0byBxdWFsaWZ5IHZhcmlvdXMgb3RoZXIgc2lnbmFscyANCisgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBpbnRlcmZhY2Ugc3VjaCBhcyBbU0VMX08oNy4uMCldLiBUaGUgU0xBVkUgbXVzdCANCisgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydCBlaXRoZXIgdGhlIFtBQ0tfSV0sIFtFUlJfSV0gb3IgW1JUWV9JXSBzaWduYWxzIGluIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgdG8gZXZlcnkgYXNzZXJ0aW9uIG9mIHRoZSBbU1RCX09dIHNpZ25hbC4gDQorDQoraW5wdXQgW1dCX01BU1RFUi0xOjBdICAgd2JkX3dlX21hc3RlcjsgICAgDQorICAgICAgICAgICAgICAgICAgICAvLyBXRV9PIFRoZSB3cml0ZSBlbmFibGUgb3V0cHV0IFtXRV9PXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgDQorICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGxvY2FsIGJ1cyBjeWNsZSBpcyBhIFJFQUQgb3IgV1JJVEUgY3ljbGUuIFRoZSANCisgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbCBpcyBuZWdhdGVkIGR1cmluZyBSRUFEIGN5Y2xlcywgYW5kIGlzIGFzc2VydGVkIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gZHVyaW5nIFdSSVRFIGN5Y2xlcy4gDQorb3V0cHV0IFtXQl9TTEFWRS0xOjBdICAgd2JkX3dlX3NsYXZlOyAgICANCisgICAgICAgICAgICAgICAgICAgIC8vIFdFX08gVGhlIHdyaXRlIGVuYWJsZSBvdXRwdXQgW1dFX09dIGluZGljYXRlcyB3aGV0aGVyIHRoZSANCisgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbG9jYWwgYnVzIGN5Y2xlIGlzIGEgUkVBRCBvciBXUklURSBjeWNsZS4gVGhlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsIGlzIG5lZ2F0ZWQgZHVyaW5nIFJFQUQgY3ljbGVzLCBhbmQgaXMgYXNzZXJ0ZWQgDQorICAgICAgICAgICAgICAgICAgICAvLyBkdXJpbmcgV1JJVEUgY3ljbGVzLiANCisNCitvdXRwdXQgW1dCX01BU1RFUi0xOjBdICB3YmRfYWNrX21hc3RlcjsgDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWNrbm93bGVkZ2UgaW5wdXQgW0FDS19JXSwgd2hlbiBhc3NlcnRlZCwgDQorICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZXMgdGhlIHRlcm1pbmF0aW9uIG9mIGEgbm9ybWFsIGJ1cyBjeWNsZS4gDQorICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIHNlZSB0aGUgW0VSUl9JXSBhbmQgW1JUWV9JXSBzaWduYWwgZGVzY3JpcHRpb25zLiANCitpbnB1dCBbV0JfU0xBVkUtMTowXSAgd2JkX2Fja19zbGF2ZTsgDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWNrbm93bGVkZ2UgaW5wdXQgW0FDS19JXSwgd2hlbiBhc3NlcnRlZCwgDQorICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZXMgdGhlIHRlcm1pbmF0aW9uIG9mIGEgbm9ybWFsIGJ1cyBjeWNsZS4gDQorICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIHNlZSB0aGUgW0VSUl9JXSBhbmQgW1JUWV9JXSBzaWduYWwgZGVzY3JpcHRpb25zLiANCisNCitpbnB1dCBbKFdCX01BU1RFUiAqQURSX1dEKS0xOjBdIHdiZF9hZHJfbWFzdGVyOyANCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhZGRyZXNzIG91dHB1dCBhcnJheSBbQURSX08oNjMuLjApXSBpcyB1c2VkIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gcGFzcyBhIGJpbmFyeSBhZGRyZXNzLCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IA0KKyAgICAgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyBiaXQgYXQgdGhlIGhpZ2hlciBudW1iZXJlZCBlbmQgb2YgdGhlIHNpZ25hbCBhcnJheS4gDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIgYXJyYXkgYm91bmRhcnkgaXMgc3BlY2lmaWMgdG8gdGhlIGRhdGEgcG9ydCBzaXplLiANCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBoaWdoZXIgYXJyYXkgYm91bmRhcnkgaXMgY29yZS1zcGVjaWZpYy4gDQorICAgICAgICAgICAgICAgICAgICAvLyBJbiBzb21lIGNhc2VzIChzdWNoIGFzIEZJRk8gaW50ZXJmYWNlcykgDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXJyYXkgbWF5IG5vdCBiZSBwcmVzZW50IG9uIHRoZSBpbnRlcmZhY2UuIA0KKw0KK291dHB1dCBbKFdCX1NMQVZFICpBRFJfV0QpLTE6MF0gd2JkX2Fkcl9zbGF2ZTsgDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWRkcmVzcyBvdXRwdXQgYXJyYXkgW0FEUl9PKDYzLi4wKV0gaXMgdXNlZCANCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIHBhc3MgYSBiaW5hcnkgYWRkcmVzcywgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCANCisgICAgICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgYml0IGF0IHRoZSBoaWdoZXIgbnVtYmVyZWQgZW5kIG9mIHRoZSBzaWduYWwgYXJyYXkuIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGFycmF5IGJvdW5kYXJ5IGlzIHNwZWNpZmljIHRvIHRoZSBkYXRhIHBvcnQgc2l6ZS4gDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaGlnaGVyIGFycmF5IGJvdW5kYXJ5IGlzIGNvcmUtc3BlY2lmaWMuIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gc29tZSBjYXNlcyAoc3VjaCBhcyBGSUZPIGludGVyZmFjZXMpIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFycmF5IG1heSBub3QgYmUgcHJlc2VudCBvbiB0aGUgaW50ZXJmYWNlLiANCisNCitpbnB1dCBbKFdCX01BU1RFUiAqIEJFX1dEKS0xOjBdIHdiZF9iZV9tYXN0ZXI7IC8vIEJ5dGUgRW5hYmxlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gU0VMX08oNy4uMCkgVGhlIHNlbGVjdCBvdXRwdXQgYXJyYXkgW1NFTF9PKDcuLjApXSBpbmRpY2F0ZXMgDQorICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSB2YWxpZCBkYXRhIGlzIGV4cGVjdGVkIG9uIHRoZSBbREFUX0koNjMuLjApXSBzaWduYWwgDQorICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBkdXJpbmcgUkVBRCBjeWNsZXMsIGFuZCB3aGVyZSBpdCBpcyBwbGFjZWQgb24gdGhlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gW0RBVF9PKDYzLi4wKV0gc2lnbmFsIGFycmF5IGR1cmluZyBXUklURSBjeWNsZXMuIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBzZWUgdGhlIFtEQVRfSSg2My4uMCldLCBbREFUX08oNjMuLjApXSBhbmQgW1NUQl9PXSANCisgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbCBkZXNjcmlwdGlvbnMuDQorb3V0cHV0IFsoV0JfU0xBVkUgKiBCRV9XRCktMTowXSB3YmRfYmVfc2xhdmU7IC8vIEJ5dGUgRW5hYmxlICANCisgICAgICAgICAgICAgICAgICAgIC8vIFNFTF9PKDcuLjApIFRoZSBzZWxlY3Qgb3V0cHV0IGFycmF5IFtTRUxfTyg3Li4wKV0gaW5kaWNhdGVzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdmFsaWQgZGF0YSBpcyBleHBlY3RlZCBvbiB0aGUgW0RBVF9JKDYzLi4wKV0gc2lnbmFsIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgZHVyaW5nIFJFQUQgY3ljbGVzLCBhbmQgd2hlcmUgaXQgaXMgcGxhY2VkIG9uIHRoZSANCisgICAgICAgICAgICAgICAgICAgIC8vIFtEQVRfTyg2My4uMCldIHNpZ25hbCBhcnJheSBkdXJpbmcgV1JJVEUgY3ljbGVzLiANCisgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gc2VlIHRoZSBbREFUX0koNjMuLjApXSwgW0RBVF9PKDYzLi4wKV0gYW5kIFtTVEJfT10gDQorICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwgZGVzY3JpcHRpb25zLg0KKw0KK2lucHV0IFtXQl9NQVNURVIgLTE6MF0gd2JkX2N5Y19tYXN0ZXI7IA0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ1lDX08gVGhlIGN5Y2xlIG91dHB1dCBbQ1lDX09dLCB3aGVuIGFzc2VydGVkLCANCisgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlcyB0aGF0IGEgdmFsaWQgYnVzIGN5Y2xlIGlzIGluIHByb2dyZXNzLiANCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaWduYWwgaXMgYXNzZXJ0ZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbGwgYnVzIGN5Y2xlcy4gDQorICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgZHVyaW5nIGEgQkxPQ0sgdHJhbnNmZXIgY3ljbGUgdGhlcmUgY2FuIGJlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbGUgZGF0YSB0cmFuc2ZlcnMuIFRoZSBbQ1lDX09dIHNpZ25hbCBpcyBhc3NlcnRlZCANCisgICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgZmlyc3QgZGF0YSB0cmFuc2ZlciwgYW5kIHJlbWFpbnMgYXNzZXJ0ZWQgDQorICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbGFzdCBkYXRhIHRyYW5zZmVyLiBUaGUgW0NZQ19PXSBzaWduYWwgaXMgdXNlZnVsIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGludGVyZmFjZXMgd2l0aCBtdWx0aS1wb3J0IGludGVyZmFjZXMgDQorICAgICAgICAgICAgICAgICAgICAvLyAoc3VjaCBhcyBkdWFsIHBvcnQgbWVtb3JpZXMpLiBJbiB0aGVzZSBjYXNlcywgDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgW0NZQ19PXSBzaWduYWwgcmVxdWVzdHMgdXNlIG9mIGEgY29tbW9uIGJ1cyBmcm9tIGFuIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJiaXRlci4gT25jZSB0aGUgYXJiaXRlciBncmFudHMgdGhlIGJ1cyB0byB0aGUgTUFTVEVSLCANCisgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGhlbGQgdW50aWwgW0NZQ19PXSBpcyBuZWdhdGVkLiANCitvdXRwdXQgW1dCX1NMQVZFIC0xOjBdIHdiZF9jeWNfc2xhdmU7IA0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ1lDX08gVGhlIGN5Y2xlIG91dHB1dCBbQ1lDX09dLCB3aGVuIGFzc2VydGVkLCANCisgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlcyB0aGF0IGEgdmFsaWQgYnVzIGN5Y2xlIGlzIGluIHByb2dyZXNzLiANCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaWduYWwgaXMgYXNzZXJ0ZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbGwgYnVzIGN5Y2xlcy4gDQorICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgZHVyaW5nIGEgQkxPQ0sgdHJhbnNmZXIgY3ljbGUgdGhlcmUgY2FuIGJlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbGUgZGF0YSB0cmFuc2ZlcnMuIFRoZSBbQ1lDX09dIHNpZ25hbCBpcyBhc3NlcnRlZCANCisgICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgZmlyc3QgZGF0YSB0cmFuc2ZlciwgYW5kIHJlbWFpbnMgYXNzZXJ0ZWQgDQorICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbGFzdCBkYXRhIHRyYW5zZmVyLiBUaGUgW0NZQ19PXSBzaWduYWwgaXMgdXNlZnVsIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGludGVyZmFjZXMgd2l0aCBtdWx0aS1wb3J0IGludGVyZmFjZXMgDQorICAgICAgICAgICAgICAgICAgICAvLyAoc3VjaCBhcyBkdWFsIHBvcnQgbWVtb3JpZXMpLiBJbiB0aGVzZSBjYXNlcywgDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgW0NZQ19PXSBzaWduYWwgcmVxdWVzdHMgdXNlIG9mIGEgY29tbW9uIGJ1cyBmcm9tIGFuIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJiaXRlci4gT25jZSB0aGUgYXJiaXRlciBncmFudHMgdGhlIGJ1cyB0byB0aGUgTUFTVEVSLCANCisgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGhlbGQgdW50aWwgW0NZQ19PXSBpcyBuZWdhdGVkLiANCisNCitpbnB1dCBbKFdCX01BU1RFUiAqIERfV0QpLTE6MF0gd2JkX2Rpbl9tYXN0ZXI7ICANCisgICAgICAgICAgICAgICAgICAgIC8vIERBVF9JKDYzLi4wKSBUaGUgZGF0YSBpbnB1dCBhcnJheSBbREFUX0koNjMuLjApXSBpcyANCisgICAgICAgICAgICAgICAgICAgIC8vIHVzZWQgdG8gcGFzcyBiaW5hcnkgZGF0YS4gVGhlIGFycmF5IGJvdW5kYXJpZXMgYXJlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lZCBieSB0aGUgcG9ydCBzaXplLiBBbHNvIHNlZSB0aGUgW0RBVF9PKDYzLi4wKV0gDQorICAgICAgICAgICAgICAgICAgICAvLyBhbmQgW1NFTF9PKDcuLjApXSBzaWduYWwgZGVzY3JpcHRpb25zLiANCisNCitvdXRwdXQgWyhXQl9TTEFWRSAqIERfV0QpLTE6MF0gd2JkX2Rpbl9zbGF2ZTsgIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gREFUX0koNjMuLjApIFRoZSBkYXRhIGlucHV0IGFycmF5IFtEQVRfSSg2My4uMCldIGlzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCB0byBwYXNzIGJpbmFyeSBkYXRhLiBUaGUgYXJyYXkgYm91bmRhcmllcyBhcmUgDQorICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmVkIGJ5IHRoZSBwb3J0IHNpemUuIEFsc28gc2VlIHRoZSBbREFUX08oNjMuLjApXSANCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBbU0VMX08oNy4uMCldIHNpZ25hbCBkZXNjcmlwdGlvbnMuIA0KKw0KK291dHB1dCBbKFdCX01BU1RFUiAqIERfV0QpLTE6MF0gd2JkX2RvdXRfbWFzdGVyOyANCisgICAgICAgICAgICAgICAgICAgIC8vIERBVF9PKDYzLi4wKSBUaGUgZGF0YSBvdXRwdXQgYXJyYXkgW0RBVF9PKDYzLi4wKV0gaXMgDQorICAgICAgICAgICAgICAgICAgICAvLyB1c2VkIHRvIHBhc3MgYmluYXJ5IGRhdGEuIFRoZSBhcnJheSBib3VuZGFyaWVzIGFyZSANCisgICAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZWQgYnkgdGhlIHBvcnQgc2l6ZS4gQWxzbyBzZWUgdGhlIFtEQVRfSSg2My4uMCldIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgW1NFTF9PKDcuLjApXSBzaWduYWwgZGVzY3JpcHRpb25zLiANCitpbnB1dCBbKFdCX1NMQVZFICogRF9XRCktMTowXSB3YmRfZG91dF9zbGF2ZTsgDQorICAgICAgICAgICAgICAgICAgICAvLyBEQVRfTyg2My4uMCkgVGhlIGRhdGEgb3V0cHV0IGFycmF5IFtEQVRfTyg2My4uMCldIGlzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCB0byBwYXNzIGJpbmFyeSBkYXRhLiBUaGUgYXJyYXkgYm91bmRhcmllcyBhcmUgDQorICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmVkIGJ5IHRoZSBwb3J0IHNpemUuIEFsc28gc2VlIHRoZSBbREFUX0koNjMuLjApXSANCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBbU0VMX08oNy4uMCldIHNpZ25hbCBkZXNjcmlwdGlvbnMuIA0KKw0KK291dHB1dCBbV0JfTUFTVEVSIC0xOjBdICB3YmRfZXJyX21hc3RlcjsgDQorICAgICAgICAgICAgICAgICAgICAvLyBFUlJfSSBUaGUgZXJyb3IgaW5wdXQgW0VSUl9JXSBpbmRpY2F0ZXMgYW4gYWJub3JtYWwgDQorICAgICAgICAgICAgICAgICAgICAvLyBjeWNsZSB0ZXJtaW5hdGlvbi4gVGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IsIGFuZCB0aGUgDQorICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBnZW5lcmF0ZWQgYnkgdGhlIE1BU1RFUiBpcyBkZWZpbmVkIGJ5IHRoZSBJUCBjb3JlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gc3VwcGxpZXIgaW4gdGhlIFdJU0hCT05FIERBVEFTSEVFVC4gQWxzbyBzZWUgdGhlIFtBQ0tfSV0gDQorICAgICAgICAgICAgICAgICAgICAvLyBhbmQgW1JUWV9JXSBzaWduYWwgZGVzY3JpcHRpb25zLiANCitpbnB1dCBbV0JfU0xBVkUgLTE6MF0gIHdiZF9lcnJfc2xhdmU7IA0KKyAgICAgICAgICAgICAgICAgICAgLy8gRVJSX0kgVGhlIGVycm9yIGlucHV0IFtFUlJfSV0gaW5kaWNhdGVzIGFuIGFibm9ybWFsIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGUgdGVybWluYXRpb24uIFRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yLCBhbmQgdGhlIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgZ2VuZXJhdGVkIGJ5IHRoZSBNQVNURVIgaXMgZGVmaW5lZCBieSB0aGUgSVAgY29yZSANCisgICAgICAgICAgICAgICAgICAgIC8vIHN1cHBsaWVyIGluIHRoZSBXSVNIQk9ORSBEQVRBU0hFRVQuIEFsc28gc2VlIHRoZSBbQUNLX0ldIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIFtSVFlfSV0gc2lnbmFsIGRlc2NyaXB0aW9ucy4gDQorDQorb3V0cHV0IFtXQl9NQVNURVIgLTE6MF0gICB3YmRfcnR5X21hc3RlcjsgDQorICAgICAgICAgICAgICAgICAgICAvLyBSVFlfSSBUaGUgcmV0cnkgaW5wdXQgW1JUWV9JXSBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5kaWNhdGVzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgaW50ZXJmYWNlIGlzIG5vdCByZWFkeSB0byBhY2NlcHQgb3Igc2VuZCBkYXRhLCBhbmQgDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBjeWNsZSBzaG91bGQgYmUgcmV0cmllZC4gV2hlbiBhbmQgaG93IHRoZSBjeWNsZSBpcyANCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZWQgaXMgZGVmaW5lZCBieSB0aGUgSVAgY29yZSBzdXBwbGllciBpbiB0aGUgV0lTSEJPTkUgDQorICAgICAgICAgICAgICAgICAgICAvLyBEQVRBU0hFRVQuIEFsc28gc2VlIHRoZSBbRVJSX0ldIGFuZCBbUlRZX0ldIHNpZ25hbCANCisgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9ucy4gDQoraW5wdXQgW1dCX1NMQVZFIC0xOjBdICAgd2JkX3J0eV9zbGF2ZTsgDQorICAgICAgICAgICAgICAgICAgICAvLyBSVFlfSSBUaGUgcmV0cnkgaW5wdXQgW1JUWV9JXSBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5kaWNhdGVzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgaW50ZXJmYWNlIGlzIG5vdCByZWFkeSB0byBhY2NlcHQgb3Igc2VuZCBkYXRhLCBhbmQgDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBjeWNsZSBzaG91bGQgYmUgcmV0cmllZC4gV2hlbiBhbmQgaG93IHRoZSBjeWNsZSBpcyANCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZWQgaXMgZGVmaW5lZCBieSB0aGUgSVAgY29yZSBzdXBwbGllciBpbiB0aGUgV0lTSEJPTkUgDQorICAgICAgICAgICAgICAgICAgICAvLyBEQVRBU0hFRVQuIEFsc28gc2VlIHRoZSBbRVJSX0ldIGFuZCBbUlRZX0ldIHNpZ25hbCANCisgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0aW9ucy4gDQorDQorDQorcmVnICBbV0JfTUFTVEVSLTE6MF0gIHdiZF9hY2tfbWFzdGVyOyANCityZWcgIFtXQl9NQVNURVItMTowXSAgd2JkX2Vycl9tYXN0ZXI7IA0KK3JlZyAgW1dCX01BU1RFUi0xOjBdICB3YmRfcnR5X21hc3RlcjsgDQorDQorDQorcmVnICBbV0JfTUFTVEVSLTE6MF0gIG1hc3Rlcl9idXN5OyAvLyBtYXN0ZXIgYnVzeSBmbGFnDQorcmVnICBbV0JfU0xBVkUtMTowXSAgIHNsYXZlX2J1c3k7ICAvLyBzbGF2ZSBidXN5IGZsYWcNCityZWcgIFtUQVJfV0QgLTE6MF0gICAgIG1hc3Rlcl9teF9pZFtXQl9NQVNURVItMTowXTsNCityZWcgIFtUQVJfV0QgLTE6MF0gICAgIHNsYXZlX214X2lkIFtXQl9TTEFWRS0xOjBdOw0KKw0KK3dpcmUgIFtUQVJfV0QtMTowXSAgICAgd2JkX3RhZGRyX21hc3Rlcl90W1dCX01BU1RFUi0xOjBdOyAvLyB0YXJnZXQgYWRkcmVzcyBmcm9tIG1hc3RlciANCit3aXJlICBbRF9XRC0xOjBdICAgICAgIHdiZF9kaW5fbWFzdGVyX3RbV0JfTUFTVEVSLTE6MF07IC8vIHRhcmdldCBhZGRyZXNzIGZyb20gbWFzdGVyIA0KK3JlZyAgIFtEX1dELTE6MF0gICAgICAgd2JkX2RvdXRfbWFzdGVyX3RbV0JfTUFTVEVSLTE6MF07IC8vIHRhcmdldCBhZGRyZXNzIGZyb20gbWFzdGVyIA0KK3dpcmUgIFtBRFJfV0QtMTowXSAgICAgd2JkX2Fkcl9tYXN0ZXJfdFtXQl9NQVNURVItMTowXTsgLy8gdGFyZ2V0IGFkZHJlc3MgZnJvbSBtYXN0ZXIgDQord2lyZSAgW0JFX1dELTE6MF0gICAgICB3YmRfYmVfbWFzdGVyX3RbV0JfTUFTVEVSLTE6MF07IC8vIHRhcmdldCBhZGRyZXNzIGZyb20gbWFzdGVyIA0KKw0KKw0KK3JlZyAgW1dCX1NMQVZFLTE6MF0gIHdiZF9zdGJfc2xhdmU7IA0KK3JlZyAgW1dCX1NMQVZFLTE6MF0gIHdiZF93ZV9zbGF2ZTsgDQorcmVnICBbV0JfU0xBVkUtMTowXSAgd2JkX2N5Y19zbGF2ZTsgDQord2lyZSBbRF9XRC0xOjBdICAgICAgd2JkX2RvdXRfc2xhdmVfdFtXQl9TTEFWRS0xOjBdOyAvLyB0YXJnZXQgZGF0YSB0b3dhcmRzIG1hc3RlciANCisNCisNCityZWcgICBbRF9XRC0xOjBdICAgICB3YmRfZGluX3NsYXZlX3RbV0JfU0xBVkUtMTowXTsgLy8gdGFyZ2V0IGFkZHJlc3MgZnJvbSBtYXN0ZXIgDQorcmVnICAgW0FEUl9XRC0xOjBdICAgIHdiZF9hZHJfc2xhdmVfdFtXQl9TTEFWRS0xOjBdOyAvLyB0YXJnZXQgYWRkcmVzcyBmcm9tIG1hc3RlciANCityZWcgICBbQkVfV0QtMTowXSAgICAgd2JkX2JlX3NsYXZlX3RbV0JfU0xBVkUtMTowXTsgLy8gdGFyZ2V0IGFkZHJlc3MgZnJvbSBtYXN0ZXIgDQorDQoraW50ZWdlciBpLGssbCxuOw0KKw0KKyAgDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICBSZS1BcnJhZ2luZyB0aGUgYXJyYXkgaW4gc2VwZXJhdGUgdHdvIGRpbWVuc2lvbmFsIGluZm9ybWF0aW9uDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorZ2VudmFyIGosbTsgDQorZ2VuZXJhdGUgICAgICAgIA0KKw0KKyAgLy8gQ29ubmVjdCB0aGUgTWFzdGVyIE11eA0KKyAgZm9yKGo9MDsgaiA8IFdCX01BU1RFUiA7IGogPSBqICsgMSkgYmVnaW4gOiBtYXN0ZXJfZXhwYW5kDQorICAgICBhc3NpZ24gd2JkX3RhZGRyX21hc3Rlcl90W2pdID0gd2JkX3RhZGRyX21hc3RlclsoKGorMSkqVEFSX1dEKS0xOmogKiBUQVJfV0RdOw0KKyAgICAgYXNzaWduIHdiZF9kaW5fbWFzdGVyX3Rbal0gID0gd2JkX2Rpbl9tYXN0ZXJbKChqKzEpKkRfV0QpLTE6aiAqIERfV0RdOw0KKyAgICAgYXNzaWduIHdiZF9hZHJfbWFzdGVyX3Rbal0gID0gd2JkX2Fkcl9tYXN0ZXJbKChqKzEpKkFEUl9XRCktMTpqICogQURSX1dEXTsNCisgICAgIGFzc2lnbiB3YmRfYmVfbWFzdGVyX3Rbal0gICA9IHdiZF9iZV9tYXN0ZXJbKChqKzEpKkJFX1dEKS0xOmogKiBCRV9XRF07DQorDQorICAgICBhc3NpZ24gd2JkX2RvdXRfbWFzdGVyWygoaisxKSpEX1dEKS0xOmogKiBEX1dEXSA9IHdiZF9kb3V0X21hc3Rlcl90W2pdOw0KKyAgZW5kDQorDQorICAvLyBDb25uZWN0IHRoZSBTbGF2ZSBNdXgNCisgIGZvcihtPTA7IG0gPCBXQl9TTEFWRSA7IG0gPSBtICsgMSkgYmVnaW4gOiBzbGF2ZV9leHBhbmQNCisgICAgIGFzc2lnbiB3YmRfZGluX3NsYXZlWygobSsxKSpEX1dEKS0xOm0gKiBEX1dEXSAgICAgICAgPSB3YmRfZGluX3NsYXZlX3RbbV07DQorICAgICBhc3NpZ24gd2JkX2Fkcl9zbGF2ZVsoKG0rMSkqQURSX1dEKS0xOm0gKiBBRFJfV0RdICAgPSB3YmRfYWRyX3NsYXZlX3RbbV07DQorICAgICBhc3NpZ24gd2JkX2JlX3NsYXZlWygobSsxKSpCRV9XRCktMTptICogQkVfV0RdICAgICAgPSB3YmRfYmVfc2xhdmVfdFttXTsNCisNCisgICAgIGFzc2lnbiB3YmRfZG91dF9zbGF2ZV90W21dICAgPSB3YmRfZG91dF9zbGF2ZVsoKG0rMSkqRF9XRCktMTptICogRF9XRF07DQorDQorICBlbmQNCitlbmRnZW5lcmF0ZQ0KKw0KK2Fsd2F5cyBAKiAgIGJlZ2luDQorICAgZm9yKGsgPSAwOyBrIDwgV0JfTUFTVEVSOyBrID0gayArIDEpIGJlZ2luDQorICAgICAgaWYobWFzdGVyX2J1c3lba10gPT0gMSkgYmVnaW4NCisgICAgICAgICB3YmRfZG91dF9tYXN0ZXJfdFtrXSA9IHdiZF9kb3V0X3NsYXZlX3RbbWFzdGVyX214X2lkW2tdXTsNCisgICAgICAgICB3YmRfYWNrX21hc3RlcltrXSAgICA9IHdiZF9hY2tfc2xhdmVbbWFzdGVyX214X2lkW2tdXTsNCisgICAgICAgICB3YmRfZXJyX21hc3RlcltrXSAgICA9IHdiZF9lcnJfc2xhdmVbbWFzdGVyX214X2lkW2tdXTsNCisgICAgICAgICB3YmRfcnR5X21hc3RlcltrXSAgICA9IHdiZF9ydHlfc2xhdmVbbWFzdGVyX214X2lkW2tdXTsNCisgICAgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgICAgIHdiZF9kb3V0X21hc3Rlcl90W2tdID0gMDsNCisgICAgICAgICB3YmRfYWNrX21hc3RlcltrXSAgICA9IDA7DQorICAgICAgICAgd2JkX2Vycl9tYXN0ZXJba10gICAgPSAwOw0KKyAgICAgICAgIHdiZF9ydHlfbWFzdGVyW2tdICAgID0gMDsNCisgICAgICBlbmQNCisgICBlbmQNCisgICBmb3IobCA9IDA7IGwgPCBXQl9TTEFWRTsgbCA9IGwgKyAxKSBiZWdpbg0KKyAgICAgIGlmKHNsYXZlX2J1c3lbbF0gPT0gMSkgYmVnaW4NCisgICAgICAgICB3YmRfZGluX3NsYXZlX3RbbF0gID0gd2JkX2Rpbl9tYXN0ZXJfdFtzbGF2ZV9teF9pZFtsXV07DQorICAgICAgICAgd2JkX2Fkcl9zbGF2ZV90W2xdICA9IHdiZF9hZHJfbWFzdGVyX3Rbc2xhdmVfbXhfaWRbbF1dOw0KKyAgICAgICAgIHdiZF9iZV9zbGF2ZV90W2xdICAgPSB3YmRfYmVfbWFzdGVyX3Rbc2xhdmVfbXhfaWRbbF1dOw0KKyAgICAgICAgIHdiZF9zdGJfc2xhdmVbbF0gICAgPSB3YmRfc3RiX21hc3RlcltzbGF2ZV9teF9pZFtsXV07DQorICAgICAgICAgd2JkX3dlX3NsYXZlW2xdICAgICA9IHdiZF93ZV9tYXN0ZXJbc2xhdmVfbXhfaWRbbF1dOw0KKyAgICAgICAgIHdiZF9jeWNfc2xhdmVbbF0gICAgPSB3YmRfY3ljX21hc3RlcltzbGF2ZV9teF9pZFtsXV07DQorICAgICAgZW5kIGVsc2UgYmVnaW4NCisgICAgICAgICB3YmRfZGluX3NsYXZlX3RbbF0gID0gMDsNCisgICAgICAgICB3YmRfYWRyX3NsYXZlX3RbbF0gID0gMDsNCisgICAgICAgICB3YmRfYmVfc2xhdmVfdFtsXSAgID0gMDsNCisgICAgICAgICB3YmRfc3RiX3NsYXZlW2xdICAgID0gMDsNCisgICAgICAgICB3YmRfd2Vfc2xhdmVbbF0gICAgID0gMDsNCisgICAgICAgICB3YmRfY3ljX3NsYXZlW2xdICAgID0gMDsNCisgICAgICBlbmQNCisgICBlbmQNCitlbmQNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgIFBhcnNpbmcgdGhyb3VnaCB0aGUgbWFzdGVyIGFuZCBkZWNpZGluZyBvbiBtdXggY29ubmVjdGlvDQorICAgU3RlcC0xOiBhbmFseXNpcyB0aGUgbWFzdGVyIGZyb20gMCB0byB0b3RhbCBtYXN0ZXINCisgICBTdGVwLTI6IElmIHRoZSBwcmV2aW91c2x5IG1hc3RlciBpcyBub3QgYnVzeSwgDQorICAgICAgICAgICBUaGVuIGNoZWNrIGZvciBhbnkgbmV3IHJlcXVlc3QgZnJvbSB0aGUgbWFzdGVyIGFuZA0KKyAgICAgICAgICAgY2hlY2sgY29ycmVzcG9uZGluZyBzbGF2ZSBpcyBmcmVlIG9yIG5vdC4gSWYgdGhlcmUgaXMgDQorICAgICAgICAgICBtYXN0ZXIgcmVxdWVzdCBhbmQgcmVxdWVzdGluZyBzbGF2ZSBpcyBmcmVlLiANCisgICAgICAgICAgIFRoZW4gc2V0IHRoZSBtYXN0ZXIgbWF4IGlkIHRvIHNsYXZlIGlkICYNCisgICAgICAgICAgIHJlcXVlc3Rpbmcgc2xhdmUgdG8gbWFzdGVyIG51bWJlciAmIHNldCB0aGUgbWFzdGVyDQorICAgICAgICAgICBhbmQgc2xhdmUgYnVzeSBmbGFnDQorICAgU3RlcC0zOiBJZiB0aGUgcHJldmlvdXMgc3RhdGUgb2YgbWFzdGVyIGlzIGJ1c3kgYW5kIGJ1cy1jeWNsZQ0KKyAgICAgICAgICAgaXMgZGUtYXNzZXJ0ZWQsIHRoZW4gcmVzZXQgdGhlIG1hc3RlciBhbmQgY29ycmVzcG9uZGluZw0KKyAgICAgICAgICAgc2xhdmUgYnVzeSBmbGFnDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCisNCithbHdheXMgQChuZWdlZGdlIHJzdF9uIG9yIHBvc2VkZ2UgY2xrKSBiZWdpbg0KKyAgIGlmKHJzdF9uID09IDApIGJlZ2luDQorICAgICAgbWFzdGVyX2J1c3kgICA8PSAwOw0KKyAgICAgIHNsYXZlX2J1c3kgICAgPD0gMDsNCisgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgIGZvcihpID0gMDsgaSA8IFdCX01BU1RFUjsgaSA9IGkgKyAxKSBiZWdpbg0KKyAgICAgICAgIGlmKG1hc3Rlcl9idXN5W2ldID09IDApIGJlZ2luDQorICAgICAgICAgICAgaWYod2JkX3N0Yl9tYXN0ZXJbaV0gJiBzbGF2ZV9idXN5W3diZF90YWRkcl9tYXN0ZXJfdFtpXV0gPT0gMCkgYmVnaW4NCisgICAgICAgICAgICAgICBzbGF2ZV9idXN5W3diZF90YWRkcl9tYXN0ZXJfdFtpXV0gICA8PSAxOw0KKyAgICAgICAgICAgICAgIG1hc3Rlcl9idXN5W2ldICAgICAgICAgICAgICA8PSAxOw0KKyAgICAgICAgICAgIGVuZA0KKyAgICAgICAgIGVuZCBlbHNlIGlmKHdiZF9jeWNfbWFzdGVyW2ldID09IDApIGJlZ2luDQorICAgICAgICAgICAgbWFzdGVyX2J1c3lbaV0gICAgICAgICAgICA8PSAwOw0KKyAgICAgICAgICAgIHNsYXZlX2J1c3lbd2JkX3RhZGRyX21hc3Rlcl90W2ldXSA8PSAwOw0KKyAgICAgICAgIGVuZA0KKyAgICAgIGVuZA0KKyAgIGVuZA0KK2VuZA0KKw0KKy8vIFNlcGVyYXRlZCBub24gcmVzZXRhYmxlIHR3byBkaW1lbnNpb25hbCByZWcNCithbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4NCisgICAgICBmb3IobiA9IDA7IG4gPCBXQl9NQVNURVI7IG4gPSBuICsgMSkgYmVnaW4NCisgICAgICAgICBpZihtYXN0ZXJfYnVzeVtuXSA9PSAwKSBiZWdpbg0KKyAgICAgICAgICAgIGlmKHdiZF9zdGJfbWFzdGVyW25dICYgc2xhdmVfYnVzeVt3YmRfdGFkZHJfbWFzdGVyX3Rbbl1dID09IDApIGJlZ2luDQorICAgICAgICAgICAgICAgbWFzdGVyX214X2lkW25dIDw9IHdiZF90YWRkcl9tYXN0ZXJfdFtuXTsNCisgICAgICAgICAgICAgICBzbGF2ZV9teF9pZCBbd2JkX3RhZGRyX21hc3Rlcl90W25dXSA8PSBuOw0KKyAgICAgICAgICAgICAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYNCisgICAgICAgICAgICAgICAvLyAkZGlzcGxheSgiJW06JXQ6IExvY2tpbmcgTWFzdGVyIDogJWQgd2l0aCBTbGF2ZSA6ICVkIiwkdGltZSxpLHdiZF90YWRkcl9tYXN0ZXJfdFtuXSk7DQorICAgICAgICAgICAgICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uDQorICAgICAgICAgICAgZW5kDQorICAgICAgICAgZW5kIGVsc2UgaWYod2JkX2N5Y19tYXN0ZXJbbl0gPT0gMCkgYmVnaW4NCisJICAgIGlmKG1hc3Rlcl9idXN5W25dID09IDEpIGJlZ2luDQorICAgICAgICAgICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZg0KKyAgICAgICAgICAgIC8vICAkZGlzcGxheSgiJW06JXQ6IFJlbGVhc2luZyBNYXN0ZXIgOiAlZCB3aXRoIFNsYXZlIDogJWQiLCR0aW1lLGksd2JkX3RhZGRyX21hc3Rlcl90W25dKTsNCisgICAgICAgICAgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24NCisgICAgICAgICAgICBlbmQNCisgICAgICAgICBlbmQNCisgICAgICBlbmQNCitlbmQNCisNCisNCitlbmRtb2R1bGUNCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYgYi92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMTY5NQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9pbnRlcmZhY2UudgpAQCAtMCwwICsxLDM4MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pLyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiBOb3YgMjYsIDIwMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHdiX2ludGVyZmFjZSAoCisgICAgICAgICAgcnN0ICAgICAgICAgICwgCisgICAgICAgICAgY2xrICAgICAgICAgICwKKworICAgICAgICAgIGRtYV9yZXFfaSAgICAsCisgICAgICAgICAgZG1hX3dyaXRlX2kgICwKKyAgICAgICAgICBkbWFfYWRkcl9pICAgLAorICAgICAgICAgIGRtYV9sZW5ndGhfaSAsCisgICAgICAgICAgZG1hX2Fja19vICAgICwKKyAgICAgICAgICBkbWFfZG9uZV9vICAgLAorCisgICAgICAgICAgZG1hX3N0YXJ0X28gICwKKyAgICAgICAgICBkbWFfd3JfbyAgICAgLAorICAgICAgICAgIGRtYV9yZF9vICAgICAsCisgICAgICAgICAgZG1hX2xhc3RfbyAgICwKKyAgICAgICAgICBkbWFfd2RhdGFfaSAgLAorICAgICAgICAgIGRtYV9yZGF0YV9vICAsCisKKyAgICAvLyBleHRlcm5hbCBtZW1vcnkKKyAgICAgICAgICB3YmRfZGF0X2kgICAgLCAKKyAgICAgICAgICB3YmRfZGF0X28gICAgLAorICAgICAgICAgIHdiZF9hZHJfbyAgICAsIAorICAgICAgICAgIHdiZF9iZV9vICAgICAsIAorICAgICAgICAgIHdiZF93ZV9vICAgICAsIAorICAgICAgICAgIHdiZF9hY2tfaSAgICAsCisgICAgICAgICAgd2JkX3N0Yl9vICAgICwgCisgICAgICAgICAgd2JkX2N5Y19vICAgICwgCisgICAgICAgICAgd2JkX2Vycl9pICAgIAorCisKKyAgICAgKTsKKworCisKK2lucHV0ICAgICAgICAgICAgcnN0ICAgICAgICAgICAgIDsgCitpbnB1dCAgICAgICAgICAgIGNsayAgICAgICAgICAgICA7CisKK2lucHV0ICAgICAgICAgICAgZG1hX3JlcV9pICAgICAgIDsKK2lucHV0ICAgICAgICAgICAgZG1hX3dyaXRlX2kgICAgIDsKK2lucHV0IFsyNTowXSAgICAgZG1hX2FkZHJfaSAgICAgIDsKK2lucHV0IFs3OjBdICAgICAgZG1hX2xlbmd0aF9pICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX2Fja19vICAgICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX2RvbmVfbyAgICAgIDsgLy8gaW5kaWNhdGVzIGVuZCBvZiBETUEgdHJhbnNhY3Rpb24KKworb3V0cHV0ICAgICAgICAgICBkbWFfc3RhcnRfbyAgICAgOworb3V0cHV0ICAgICAgICAgICBkbWFfd3JfbyAgICAgICAgOworb3V0cHV0ICAgICAgICAgICBkbWFfcmRfbyAgICAgICAgOworb3V0cHV0ICAgICAgICAgICBkbWFfbGFzdF9vICAgICAgOworaW5wdXQgIFszMTowXSAgICBkbWFfd2RhdGFfaSAgICAgOworb3V0cHV0IFszMTowXSAgICBkbWFfcmRhdGFfbyAgICAgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXQiBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICBbMzE6MF0gICAgd2JkX2RhdF9pICAgICAgIDsgLy8gZGF0YSBpbnB1dAorb3V0cHV0IFszMTowXSAgICB3YmRfZGF0X28gICAgICAgOyAvLyBkYXRhIG91dHB1dAorb3V0cHV0IFsyMzowXSAgICB3YmRfYWRyX28gICAgICAgOyAvLyBhZGRyZXNzCitvdXRwdXQgIFszOjBdICAgIHdiZF9iZV9vICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCitvdXRwdXQgICAgICAgICAgIHdiZF93ZV9vICAgICAgICA7IC8vIHdyaXRlIAoraW5wdXQgICAgICAgICAgICB3YmRfYWNrX2kgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAorb3V0cHV0ICAgICAgICAgICB3YmRfc3RiX28gICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAorb3V0cHV0ICAgICAgICAgICB3YmRfY3ljX28gICAgICAgOyAvLyB3YiBjeWNsZQoraW5wdXQgICAgICAgICAgICB3YmRfZXJyX2kgICAgICAgOyAvLyB3ZSBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIERlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzI6MF0gICAgICAgIHN0YXRlICAgICAgICAgICA7CityZWcgWzI6MF0gICAgICAgIHN0YXRlX2QgICAgICAgICA7CityZWcgWzc6MF0gICAgICAgIHByZXFfbGVuICAgICAgICA7IC8vIHBlbmRpbmcgcmVxdWVzdCBsZW5ndGggaW4gYnl0ZXMKK3JlZyAgICAgICAgICAgICAgd2JkX3dlX28gICAgICAgIDsgLy8gd2VzdGJvbmUgd3JpdGUgcmVxCityZWcgWzIzOjBdICAgICAgIHdiZF9hZHJfbyAgICAgICA7IC8vIHdlc3Rub25lIGFkZHJlc3MKK3JlZyAgICAgICAgICAgICAgZG1hX2Fja19vICAgICAgIDsgLy8gZG1hIGFjaworcmVnIFs3OjBdICAgICAgICB0d2J0cmFucyAgICAgICAgOyAvLyB0b3RhbCB3ZXN0Ym9uZSB0cmFuc2FjdGlvbgorcmVnICAgICAgICAgICAgICBkbWFfd3JfbyAgICAgICAgOyAvLyBkbWEgd3JpdGUgcmVxdWVzdAorcmVnICAgICAgICAgICAgICBkbWFfcmRfbyAgICAgICAgOyAvLyBkbWEgcmVhZCByZXF1ZXN0CityZWcgWzMxOjBdICAgICAgIHRlbXBfZGF0YSAgICAgICA7IC8vIHRlbXAgaG9sZGluZyBkYXRhCityZWcgWzE6MF0gICAgICAgIGJlX3NvZiAgICAgICAgICA7IC8vIEJ5dGUgZW5hYmxlIHN0YXJ0aW5nIGFsaWdubWVudAorcmVnIFszMTowXSAgICAgICB3YmRfZGF0X28gICAgICAgOyAvLyB3ZXN0Ym9uZSBkYXRhIG91dAorcmVnIFszOjBdICAgICAgICB3YmRfYmVfbyAgICAgICAgOyAvLyB3ZXN0IGJvbmUgYnl0ZSBlbmFibGUgCityZWcgWzMxOjBdICAgICAgIGRtYV9yZGF0YV9vICAgICA7IC8vIGRtYSByZWFkIGRhdGEKK3JlZyAgICAgICAgICAgICAgd2JkX3N0Yl9vICAgICAgIDsgCityZWcgICAgICAgICAgICAgIGRtYV9zdGFydF9vICAgICA7IC8vIGRtYSBmaXJzdCB0cmFuc2ZlcgorcmVnICAgICAgICAgICAgICBkbWFfbGFzdF9vICAgICAgOyAvLyBkbWEgbGFzdCB0cmFuc2ZlcgorCitwYXJhbWV0ZXIgV0JfSURMRSAgICAgICAgICAgPSAzJ2IwMDA7CitwYXJhbWV0ZXIgV0JfUkVRICAgICAgICAgICAgPSAzJ2IwMDE7CitwYXJhbWV0ZXIgV0JfV1JfUEhBU0UgICAgICAgPSAzJ2IwMTA7CitwYXJhbWV0ZXIgV0JfUkRfUEhBU0VfU09GICAgPSAzJ2IwMTE7CitwYXJhbWV0ZXIgV0JfUkRfUEhBU0VfQ09OVCAgPSAzJ2IxMDA7CisKK2Fzc2lnbiBkbWFfZG9uZV9vID0gKHN0YXRlID09IFdCX0lETEUpICYmIChzdGF0ZV9kICE9ICBXQl9JRExFKTsKKworYWx3YXlzIEAocG9zZWRnZSByc3Qgb3IgcG9zZWRnZSBjbGspCitiZWdpbgorICAgaWYocnN0KSBiZWdpbgorICAgICAgc3RhdGUgICAgICAgICA8PSBXQl9JRExFOworICAgICAgc3RhdGVfZCAgICAgICA8PSBXQl9JRExFOworICAgICAgd2JkX3dlX28gICAgICA8PSAwOworICAgICAgd2JkX2Fkcl9vICAgICA8PSAwOworICAgICAgcHJlcV9sZW4gICAgICA8PSAwOworICAgICAgZG1hX2Fja19vICAgICA8PSAwOworICAgICAgdHdidHJhbnMgICAgICA8PSAwOworICAgICAgZG1hX3dyX28gICAgICA8PSAwOworICAgICAgZG1hX3JkX28gICAgICA8PSAwOworICAgICAgdGVtcF9kYXRhICAgICA8PSAwOworICAgICAgYmVfc29mICAgICAgICA8PSAwOworICAgICAgd2JkX2RhdF9vICAgICA8PSAwOyAKKyAgICAgIHdiZF9iZV9vICAgICAgPD0gMDsgCisgICAgICBkbWFfcmRhdGFfbyAgIDw9IDA7CisgICAgICB3YmRfc3RiX28gICAgIDw9IDA7CisgICAgICBkbWFfc3RhcnRfbyAgIDw9IDA7CisgICAgICBkbWFfbGFzdF9vICAgIDw9IDA7CisgICBlbmQKKyAgIGVsc2UgYmVnaW4KKyAgICAgIHN0YXRlX2QgICAgICAgPD0gc3RhdGU7CisgICAgICBjYXNlKHN0YXRlKQorICAgICAgV0JfSURMRSA6IAorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmKGRtYV9yZXFfaSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBkbWFfYWNrX28gIDw9IDE7CisgICAgICAgICAgICAgICB3YmRfd2VfbyAgIDw9IGRtYV93cml0ZV9pOworICAgICAgICAgICAgICAgd2JkX2Fkcl9vICA8PSBkbWFfYWRkcl9pWzI1OjJdOworICAgICAgICAgICAgICAgYmVfc29mICAgICA8PSBkbWFfYWRkcl9pWzFdIDw8IDEgKyBkbWFfYWRkcl9pWzBdOworICAgICAgICAgICAgICAgcHJlcV9sZW4gICA8PSBkbWFfbGVuZ3RoX2k7CisgICAgICAgICAgICAgICAvLyB0b3RhbCB3YiB0cmFuc2ZlcgorICAgICAgICAgICAgICAgdHdidHJhbnMgICA8PSBkbWFfbGVuZ3RoX2lbNzoyXSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KGRtYV9sZW5ndGhfaVsxOjBdKSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KGRtYV9hZGRyX2lbMTowXSk7CisgICAgICAgICAgICAgICBzdGF0ZSAgICAgICA8PSBXQl9SRVE7CisgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICBkbWFfcmRfbyAgIDw9IDA7CisgICAgICAgICAgICB3YmRfc3RiX28gIDw9IDA7CisgICAgICAgICAgICBkbWFfc3RhcnRfbyAgPD0gMDsKKyAgICAgICAgIGVuZAorICAgICAgV0JfUkVRIDoKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBkbWFfYWNrX28gICAgICA8PSAwOworICAgICAgICAgICAgd2JkX3N0Yl9vICAgICAgPD0gMTsKKyAgICAgICAgICAgIGlmKHdiZF93ZV9vKSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX3dyX28gICAgPD0gMTsKKyAgICAgICAgICAgICAgIGRtYV9zdGFydF9vIDw9IDE7CisgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICA8PSBkbWFfd2RhdGFfaTsgCisgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgICAgd2JkX2JlX28gICA8PSA0J2IxMTExOyAKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgIDw9IHByZXFfbGVuIC0gNDsKKyAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IHtkbWFfd2RhdGFfaVsyMzowXSw4J2gwfTsgCisgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjExMTA7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAzOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAyKSBiZWdpbgorICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbMTU6MF0sMTYnaDB9OyAKKyAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gNCdiMTEwMDsgCisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICA8PSBwcmVxX2xlbiAtIDI7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzc6MF0sMjMnaDB9OyAKKyAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gNCdiMTAwMDsgCisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICA8PSBwcmVxX2xlbiAtIDE7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICBzdGF0ZSAgICAgIDw9IFdCX1dSX1BIQVNFOworICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPT0gMSkgCisgICAgICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBzdGF0ZSAgIDw9IFdCX1JEX1BIQVNFX1NPRjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICBXQl9XUl9QSEFTRSA6CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgZG1hX3N0YXJ0X28gICAgICAgPD0gMDsKKyAgICAgICAgICAgIGlmKHdiZF9hY2tfaSkgYmVnaW4KKyAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID09IDEpIAorICAgICAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDA7CisgICAgICAgICAgICAgICBpZih0d2J0cmFucyA+IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICA8PSBkbWFfd2RhdGFfaTsgCisgICAgICAgICAgICAgICAgICB0d2J0cmFucyAgICA8PSB0d2J0cmFucyAtMTsKKyAgICAgICAgICAgICAgICAgIGlmKGJlX3NvZiA9PSAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSBkbWFfd2RhdGFfaTsgCisgICAgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbMjM6MF0sdGVtcF9kYXRhWzMxOjI0XX07IAorICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAyKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbMTU6MF0sdGVtcF9kYXRhWzMxOjE2XX07IAorICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IHtkbWFfd2RhdGFfaVs3OjBdLHRlbXBfZGF0YVszMTo4XX07IAorICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID4gMSkgYmVnaW4gLy8gSWYgdGhlIFBlbmRpbmcgVHJhbnNmZXIgaXMgbW9yZSB0aGFuIDEKKyAgICAgICAgICAgICAgICAgICAgIGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gNCdiMTExMTsgCisgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgIDw9IHByZXFfbGVuIC0gNDsKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgZWxzZSBiZWdpbiAvLyBmb3IgbGFzdCB3cml0ZSBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gcHJlcV9sZW5bMTowXSA9PSAyJ2IwMCA/IDQnYjExMTE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuWzE6MF0gPT0gMidiMDEgPyA0J2IwMDAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlblsxOjBdID09IDInYjEwID8gNCdiMDAxMTogNCdiMDExMTsKKworICAgICAgICAgICAgICAgICAgICAgY2FzZSh7YmVfc29mWzE6MF0scHJlcV9sZW5bMTowXX0pCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBhbGlnbm1lbnQgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMDAxIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDAxMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAwMTEgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMDAwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYWxpZ25tZW50ID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDEwMSA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAxMTAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMTExIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDEwMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGFsaWdubWVudCA9IDIKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjEwMDEgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMDEwIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTAxMSA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjEwMDAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBhbGlnbm1lbnQgPSAzCisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMTAxIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTExMCA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjExMTEgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMTAwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV93cl9vICA8PSAwOworICAgICAgICAgICAgICAgICAgd2JkX3N0Yl9vIDw9IDA7CisgICAgICAgICAgICAgICAgICBzdGF0ZSAgICAgPD0gV0JfSURMRTsKKyAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAwOworICAgICAgICAgICAgICAgZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIFdCX1JEX1BIQVNFX1NPRiA6CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYod2JkX2Fja19pKSBiZWdpbgorICAgICAgICAgICAgICAgdHdidHJhbnMgICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICBpZih0d2J0cmFucyA9PSAxKSBiZWdpbiAvLyBJZiB0aGUgUGVuZGluZyBUcmFuc2ZlciBpcyAxCisgICAgICAgICAgICAgICAgICAgZG1hX3JkX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgIGRtYV9zdGFydF9vPD0gMTsKKyAgICAgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHdiZF9kYXRfaTsgCisgICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICA8PSB7OCdoMCx3YmRfZGF0X2lbMzE6MjRdfTsgCisgICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICA8PSBwcmVxX2xlbiAtIDM7CisgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHsxNidoMCx3YmRfZGF0X2lbMzE6MTZdfTsgCisgICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICA8PSBwcmVxX2xlbiAtIDI7CisgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgPD0gezIzJ2gwLHdiZF9kYXRfaVszMTo4XX07IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAwOworICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMTsKKyAgICAgICAgICAgICAgICAgICBzdGF0ZSAgICAgIDw9IFdCX0lETEU7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgYmVnaW4gLy8gcGVuZGluZyB0cmFuc2N0aW9uIGlzIG1vcmUgdGhhbiAxCisgICAgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgPD0gd2JkX2RhdF9pOyAKKyAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRfbyAgICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBkbWFfc3RhcnRfbyAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSA0OworICAgICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICAgPD0gezgnaDAsd2JkX2RhdF9pWzMxOjI0XX07IAorICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZF9vICAgICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICA8PSBwcmVxX2xlbiAtIDM7CisgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gezE2J2gwLHdiZF9kYXRfaVszMToxNl19OyAKKyAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICA8PSBwcmVxX2xlbiAtIDI7CisgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICA8PSB7MjMnaDAsd2JkX2RhdF9pWzMxOjhdfTsgCisgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAwOworICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBzdGF0ZSAgICAgPD0gV0JfUkRfUEhBU0VfQ09OVDsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBkbWFfcmRfbyAgPD0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICBXQl9SRF9QSEFTRV9DT05UOgorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRtYV9zdGFydF9vICA8PSAwOworICAgICAgICAgICAgaWYod2JkX2Fja19pKSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX3JkX28gICAgICAgICA8PSAxOworICAgICAgICAgICAgICAgdHdidHJhbnMgICAgICAgICA8PSB0d2J0cmFucyAtMTsKKyAgICAgICAgICAgICAgIGlmKGJlX3NvZiA9PSAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gICA8PSB3YmRfZGF0X2k7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gICA8PSB7d2JkX2RhdF9pWzc6MF0sdGVtcF9kYXRhWzIzOjBdfTsgCisgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICAgIDw9IHs4J2gwLHdiZF9kYXRfaVszMTo4XX07CisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgIDw9IHByZXFfbGVuIC0gMzsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0ge3diZF9kYXRfaVsxNTowXSx0ZW1wX2RhdGFbMTU6MF19OyAKKyAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YSAgICAgPD0gezE2J2gwLHdiZF9kYXRfaVszMToxNl19OworICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDI7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0ge3diZF9kYXRfaVsyMzowXSx0ZW1wX2RhdGFbNzowXX07IAorICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgICA8PSB7MjQnaDAsd2JkX2RhdF9pWzMxOjIzXX07CisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgIDw9IHByZXFfbGVuIC0gMTsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPT0gMSkgYmVnaW4gIC8vIElmIHRoZSBpdCdzIGxhc3QgdHJhbnNmZXIKKyAgICAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMTsKKyAgICAgICAgICAgICAgICAgIHN0YXRlICAgICAgPD0gV0JfSURMRTsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDA7CisgICAgICAgICAgICAgICBkbWFfcmRfbyAgIDw9IDA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgZW5kY2FzZQorICAgZW5kCitlbmQgCisKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxLy5naXRpZ25vcmUgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzFhYzgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorYnVpbGQvKioKK3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL3NyYy8qKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxLy5naXRtb2R1bGVzIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvLmdpdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3ZDcyMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxLy5naXRtb2R1bGVzCkBAIC0wLDAgKzEsOSBAQAorW3N1Ym1vZHVsZSAiZGVwZW5kZW5jaWVzL3Jpc2N2LXRlc3RzIl0KKwlwYXRoID0gZGVwZW5kZW5jaWVzL3Jpc2N2LXRlc3RzCisJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LXRlc3RzCitbc3VibW9kdWxlICJkZXBlbmRlbmNpZXMvcmlzY3YtY29tcGxpYW5jZSJdCisJcGF0aCA9IGRlcGVuZGVuY2llcy9yaXNjdi1jb21wbGlhbmNlCisJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UKK1tzdWJtb2R1bGUgImRlcGVuZGVuY2llcy9jb3JlbWFyayJdCisJcGF0aCA9IGRlcGVuZGVuY2llcy9jb3JlbWFyaworCXVybCA9IGh0dHBzOi8vZ2l0aHViLmNvbS9lZW1iYy9jb3JlbWFyawpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvTElDRU5TRSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NTNhZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL0xJQ0VOU0UKQEAgLTAsMCArMSwyMyBAQAor77u/IyBTb2xkZXJwYWQgSGFyZHdhcmUgTGljZW5jZSBWZXJzaW9uIDIuMAorCitUaGlzIGxpY2VuY2UgKHRoZSDigJxMaWNlbmNl4oCdKSBvcGVyYXRlcyBhcyBhIHdyYXBhcm91bmQgbGljZW5jZSB0byB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSDigJxBcGFjaGUgTGljZW5zZeKAnSkgYW5kIGdyYW50cyB0byBZb3UgdGhlIHJpZ2h0cywgYW5kIGltcG9zZXMgdGhlIG9ibGlnYXRpb25zLCBzZXQgb3V0IGluIHRoZSBBcGFjaGUgTGljZW5zZSAod2hpY2ggY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHA6Ly9hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKSwgd2l0aCB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnMuIEl0IG11c3QgYmUgcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBBcGFjaGUgTGljZW5zZS4gU2VjdGlvbiAxIGJlbG93IG1vZGlmaWVzIGRlZmluaXRpb25zIGluIHRoZSBBcGFjaGUgTGljZW5zZSwgYW5kIHNlY3Rpb24gMiBiZWxvdyByZXBsYWNlcyBzZWN0aW9ucyAyIG9mIHRoZSBBcGFjaGUgTGljZW5zZS4gWW91IG1heSwgYXQgeW91ciBvcHRpb24sIGNob29zZSB0byB0cmVhdCBhbnkgV29yayByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXMgcmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlICh0aHVzIGlnbm9yaW5nIGFsbCBzZWN0aW9ucyB3cml0dGVuIGJlbG93IGVudGlyZWx5KS4gV29yZHMgaW4gaXRhbGljcyBpbmRpY2F0ZSBjaGFuZ2VzIHJvbSB0aGUgQXBhY2hlIExpY2Vuc2UsIGJ1dCBhcmUgaW5kaWNhdGl2ZSBhbmQgbm90IHRvIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBpbnRlcnByZXRhdGlvbi4KKworMS4gVGhlIGRlZmluaXRpb25zIHNldCBvdXQgaW4gdGhlIEFwYWNoZSBMaWNlbnNlIGFyZSBtb2RpZmllZCBhcyBmb2xsb3dzOgorCitDb3B5cmlnaHQgYW55IHJlZmVyZW5jZSB0byDigJhjb3B5cmlnaHTigJkgKHdoZXRoZXIgY2FwaXRhbGlzZWQgb3Igbm90KSBpbmNsdWRlcyDigJhSaWdodHPigJkgKGFzIGRlZmluZWQgYmVsb3cpLgorCitDb250cmlidXRpb24gYWxzbyBpbmNsdWRlcyBhbnkgZGVzaWduLCBhcyB3ZWxsIGFzIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAuCisKK0Rlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4gcmV2ZXJzaWJseSBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgb3IgcGh5c2ljYWxseSBjb25uZWN0IHRvIG9yIGludGVyb3BlcmF0ZSB3aXRoIHRoZSBpbnRlcmZhY2VzIG9mIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKK09iamVjdCBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtIG9yIHRoZSBhcHBsaWNhdGlvbiBvZiBhIFNvdXJjZSBmb3JtIHRvIHBoeXNpY2FsIG1hdGVyaWFsLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwgdGhlIGluc3RhbnRpYXRpb24gb2YgYSBoYXJkd2FyZSBkZXNpZ24gb3IgcGh5c2ljYWwgb2JqZWN0IGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcywgaW5jbHVkaW5nIGludGVybWVkaWF0ZSBmb3JtcyBzdWNoIGFzIGJ5dGVjb2RlcywgRlBHQSBiaXRzdHJlYW1zLCBtb3VsZHMsIGFydHdvcmsgYW5kIHNlbWljb25kdWN0b3IgdG9wb2dyYXBoaWVzIChtYXNrIHdvcmtzKS4KKworUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQgYW55IHNpbWlsYXIgcmlnaHQgaW5jbHVkaW5nIGRlc2lnbiByaWdodCAod2hldGhlciByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCksIHNlbWljb25kdWN0b3IgdG9wb2dyYXBoeSAobWFzaykgcmlnaHRzIGFuZCBkYXRhYmFzZSByaWdodHMgKGJ1dCBleGNsdWRpbmcgUGF0ZW50cyBhbmQgVHJhZGVtYXJrcykuCisKK1NvdXJjZSBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb3VyY2UgY29kZSwgbmV0IGxpc3RzLCBib2FyZCBsYXlvdXRzLCBDQUQgZmlsZXMsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworV29yayBhbHNvIGluY2x1ZGVzIGEgZGVzaWduIG9yIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2UgZm9ybSBvciBvdGhlciBPYmplY3QgZm9ybS4KKworMi4gR3JhbnQgb2YgTGljZW5jZQorCisyLjEgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHVuZGVyIHRoZSBSaWdodHMgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIG1ha2UsIGFkYXB0LCByZXBhaXIsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtIGFuZCBkbyBhbnl0aGluZyBpbiByZWxhdGlvbiB0byB0aGUgV29yayBhcyBpZiB0aGUgUmlnaHRzIGRpZCBub3QgZXhpc3QuCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9NYWtlZmlsZSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjMzYzUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9NYWtlZmlsZQpAQCAtMCwwICsxLDI5MyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlZmlsZSBmb3IgU0NSMQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFBBUkFNRVRFUlMKKworIyBDRkcgPSA8TUFYLCBCQVNFLCBNSU4sIENVU1RPTT4KKyMgQlVTID0gPEFIQiwgQVhJPgorCitleHBvcnQgQ0ZHICAgICAgPz0gTUFYCitleHBvcnQgQlVTICAgICAgPz0gQUhCCisKK2lmZXEgKCQoQ0ZHKSwgTUFYKQorIyBQcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gU0NSMV9DRkdfUlYzMklNQ19NQVgKKyAgICBvdmVycmlkZSBBUkNIICAgICAgICAgOj0gSU1DCisgICAgb3ZlcnJpZGUgVkVDVF9JUlEgICAgIDo9IDEKKyAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMQorICAgIG92ZXJyaWRlIFRDTSAgICAgICAgICA6PSAxCisgICAgb3ZlcnJpZGUgU0lNX0NGR19ERUYgIDo9IFNDUjFfQ0ZHX1JWMzJJTUNfTUFYCitlbHNlCisgICAgaWZlcSAoJChDRkcpLCBCQVNFKQorICAgICMgUHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCisgICAgICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBJQworICAgICAgICBvdmVycmlkZSBWRUNUX0lSUSAgICAgOj0gMQorICAgICAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMQorICAgICAgICBvdmVycmlkZSBUQ00gICAgICAgICAgOj0gMQorICAgICAgICBvdmVycmlkZSBTSU1fQ0ZHX0RFRiAgOj0gU0NSMV9DRkdfUlYzMklDX0JBU0UKKyAgICBlbHNlCisgICAgICAgIGlmZXEgKCQoQ0ZHKSwgTUlOKQorICAgICAgICAjIFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBTQ1IxX0NGR19SVjMyRUNfTUlOCisgICAgICAgICAgICBvdmVycmlkZSBBUkNIICAgICAgICAgOj0gRUMKKyAgICAgICAgICAgIG92ZXJyaWRlIFZFQ1RfSVJRICAgICA6PSAwCisgICAgICAgICAgICBvdmVycmlkZSBJUElDICAgICAgICAgOj0gMAorICAgICAgICAgICAgb3ZlcnJpZGUgVENNICAgICAgICAgIDo9IDEKKyAgICAgICAgICAgIG92ZXJyaWRlIFNJTV9DRkdfREVGICA6PSBTQ1IxX0NGR19SVjMyRUNfTUlOCisgICAgICAgIGVsc2UKKyAgICAgICAgIyBDVVNUT00gY29uZmlndXJhdGlvbi4gUGFyYW1ldGVycyBjYW4gYmUgb3ZlcndyaXR0ZW4KKyAgICAgICAgICAgICMgVGhlc2Ugb3B0aW9ucyBhcmUgZm9yIGNvbXBpbGluZyB0ZXN0cyBvbmx5LiBTZXQgdGhlIGNvcnJlc3BvbmRpbmcgUlRMIHBhcmFtZXRlcnMgbWFudWFsbHkgaW4gdGhlIGZpbGUgc2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aC4KKyAgICAgICAgICAgICMgQVJDSCA9IDxJTUMsIElDLCBJTSwgSSwgRU1DLCBFTSwgRUMsIEU+CisgICAgICAgICAgICAjIFZFQ1RfSVJRID0gPDAsIDE+CisgICAgICAgICAgICAjIElQSUMgPSA8MCwgMT4KKyAgICAgICAgICAgICMgVENNID0gPDAsIDE+CisgICAgICAgICAgICBBUkNIICAgICAgPz0gSU1DCisgICAgICAgICAgICBWRUNUX0lSUSAgPz0gMAorICAgICAgICAgICAgSVBJQyAgICAgID89IDAKKyAgICAgICAgICAgIFRDTSAgICAgICA/PSAwCisgICAgICAgICAgICBTSU1fQ0ZHX0RFRiAgPSBTQ1IxX0NGR18kKENGRykKKyAgICAgICAgZW5kaWYKKyAgICBlbmRpZgorZW5kaWYKKworIyBleHBvcnQgYWxsIG92ZXJyaWRlZCB2YXJpYWJsZXMKK2V4cG9ydCBBUkNICitleHBvcnQgVkVDVF9JUlEKK2V4cG9ydCBJUElDCitleHBvcnQgVENNCitleHBvcnQgU0lNX0NGR19ERUYKKworQVJDSF9sb3dlcmNhc2UgPSAkKHNoZWxsIGVjaG8gJChBUkNIKSB8IHRyIEEtWiBhLXopCitCVVNfbG93ZXJjYXNlICA9ICQoc2hlbGwgZWNobyAkKEJVUykgIHwgdHIgQS1aIGEteikKKworaWZlcSAoJChBUkNIX2xvd2VyY2FzZSksKQorICAgIEFSQ0hfdG1wID0gaW1jCitlbHNlCisgICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisgICAgICAgIEFSQ0hfdG1wICAgKz0gZQorICAgICAgICBFWFRfQ0ZMQUdTICs9IC1EX19SVkVfRVhUCisgICAgZWxzZQorICAgICAgICBBUkNIX3RtcCAgICs9IGkKKyAgICBlbmRpZgorICAgIGlmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorICAgICAgICBBUkNIX3RtcCAgIDo9ICQoQVJDSF90bXApbQorICAgIGVuZGlmCisgICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgYywkKEFSQ0hfbG93ZXJjYXNlKSkpCisgICAgICAgIEFSQ0hfdG1wICAgOj0gJChBUkNIX3RtcCljCisgICAgICAgIEVYVF9DRkxBR1MgKz0gLURfX1JWQ19FWFQKKyAgICBlbmRpZgorZW5kaWYKKworb3ZlcnJpZGUgQVJDSD0kKEFSQ0hfdG1wKQorCisjIFVzZSB0aGlzIHBhcmFtZXRlciB0byBlbmFibGUgdHJhY2Vsb2cKK1RSQUNFID89IDAKKworaWZlcSAoJChUUkFDRSksIDEpCisgICAgZXhwb3J0IFNJTV9UUkFDRV9ERUYgPSBTQ1IxX1RSQUNFX0xPR19FTgorZWxzZQorICAgIGV4cG9ydCBTSU1fVFJBQ0VfREVGID0gU0NSMV9UUkFDRV9MT0dfRElTCitlbmRpZgorCisKKyMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zIGZvciBzaW11bGF0aW9uIGJ1aWxkIGNvbW1hbmQKK1NJTV9CVUlMRF9PUFRTID89CisKKyMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNldCB0aGUgbGlzdCBvZiB0ZXN0cyB0byBydW4KKyMgVEFSR0VUUyA9IDxyaXNjdl9pc2EsIHJpc2N2X2NvbXBsaWFuY2UsIGNvcmVtYXJrLCBkaHJ5c3RvbmUyMSwgaGVsbG8sIGlzcl9zYW1wbGU+CitleHBvcnQgVEFSR0VUUyA6PQorCisKK2V4cG9ydCBBQkkgICA/PSBpbHAzMgorIyBUZXN0YmVuY2ggbWVtb3J5IGRlbGF5IHBhdHRlcm5zXAorICAoRkZGRkZGRkYgLSBubyBkZWxheSwgMDAwMDAwMDAgLSByYW5kb20gZGVsYXksIDAwMDAwMDAxIC0gbWF4IGRlbGF5KQoraW1lbV9wYXR0ZXJuID89IEZGRkZGRkZGCitkbWVtX3BhdHRlcm4gPz0gRkZGRkZGRkYKKworVkNTX09QVFMgICAgICAgPz0KK01PREVMU0lNX09QVFMgID89CitOQ1NJTV9PUFRTICAgICA/PQorVkVSSUxBVE9SX09QVFMgPz0KKworY3VycmVudF9nb2FsIDo9ICQoTUFLRUNNREdPQUxTOnJ1bl8lPSUpCitpZmVxICgkKGN1cnJlbnRfZ29hbCksKQorICAgIGN1cnJlbnRfZ29hbCA6PSB2ZXJpbGF0b3IKK2VuZGlmCisKKyMgUGF0aHMKK2V4cG9ydCByb290X2RpciA6PSAkKHNoZWxsIHB3ZCkKK2V4cG9ydCB0c3RfZGlyICA6PSAkKHJvb3RfZGlyKS9zaW0vdGVzdHMKK2V4cG9ydCBpbmNfZGlyICA6PSAkKHRzdF9kaXIpL2NvbW1vbgorZXhwb3J0IGJsZF9kaXIgIDo9ICQocm9vdF9kaXIpL2J1aWxkLyQoY3VycmVudF9nb2FsKV8kKEJVUylfJChDRkcpXyQoQVJDSClfSVBJQ18kKElQSUMpX1RDTV8kKFRDTSlfVklSUV8kKFZFQ1RfSVJRKV9UUkFDRV8kKFRSQUNFKQorCit0ZXN0X3Jlc3VsdHMgOj0gJChibGRfZGlyKS90ZXN0X3Jlc3VsdHMudHh0Cit0ZXN0X2luZm8gICAgOj0gJChibGRfZGlyKS90ZXN0X2luZm8KK3NpbV9yZXN1bHRzICA6PSAkKGJsZF9kaXIpL3NpbV9yZXN1bHRzLnR4dAorCit0b2RvX2xpc3QgICAgOj0gJChibGRfZGlyKS90b2RvLnR4dAorIyBFbnZpcm9ubWVudAorZXhwb3J0IENST1NTX1BSRUZJWCAgPz0gcmlzY3Y2NC11bmtub3duLWVsZi0KK2V4cG9ydCBSSVNDVl9HQ0MgICAgID89ICQoQ1JPU1NfUFJFRklYKWdjYworZXhwb3J0IFJJU0NWX09CSkRVTVAgPz0gJChDUk9TU19QUkVGSVgpb2JqZHVtcCAtRAorZXhwb3J0IFJJU0NWX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtTyB2ZXJpbG9nCitleHBvcnQgUklTQ1ZfUkVBREVMRiA/PSAkKENST1NTX1BSRUZJWClyZWFkZWxmIC1zCisjLS0KK2lmbmVxICgsJChmaW5kc3RyaW5nIGF4aSwkKEJVU19sb3dlcmNhc2UpKSkKK2V4cG9ydCBydGxfdG9wX2ZpbGVzIDo9IGF4aV90b3AuZmlsZXMKK2V4cG9ydCBydGxfdGJfZmlsZXMgIDo9IGF4aV90Yi5maWxlcworZXhwb3J0IHRvcF9tb2R1bGUgICAgOj0gc2NyMV90b3BfdGJfYXhpCitlbHNlCitleHBvcnQgcnRsX3RvcF9maWxlcyA6PSBhaGJfdG9wLmZpbGVzCitleHBvcnQgcnRsX3RiX2ZpbGVzICA6PSBhaGJfdGIuZmlsZXMKK2V4cG9ydCB0b3BfbW9kdWxlICAgIDo9IHNjcjFfdG9wX3RiX2FoYgorZW5kaWYKKworaWZuZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisjIFRlc3RzIGNhbiBiZSBjb21waWxlZCBmb3IgUlZFIG9ubHkgaWYgZ2NjIHZlcnNpb24gOC4wLjAgb3IgaGlnaGVyCisgICAgR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKKyAgICBpZmVxICIkKEdDQ1ZFUlNJT05HVDcpIiAiMSIKKyAgICAgICAgQUJJIDo9IGlscDMyZQorICAgIGVuZGlmCitlbmRpZgorCisjLS0KK2lmZXEgKCwkKGZpbmRzdHJpbmcgZSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisjIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCisKKyAgICAjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSByaXNjdl9pc2EKKyAgICBUQVJHRVRTICs9IHJpc2N2X2lzYQorCisgICAgIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfY29tcGxpYW5jZQorICAgIFRBUkdFVFMgKz0gcmlzY3ZfY29tcGxpYW5jZQorZW5kaWYKKworIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgaXNyX3NhbXBsZQorVEFSR0VUUyArPSBpc3Jfc2FtcGxlCisKKyMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGNvcmVtYXJrCitUQVJHRVRTICs9IGNvcmVtYXJrCisKKyMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGRocnlzdG9uZQorVEFSR0VUUyArPSBkaHJ5c3RvbmUyMQorCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBoZWxsbyB0ZXN0CitUQVJHRVRTICs9IGhlbGxvCisKKyMgVGFyZ2V0cworLlBIT05ZOiB0ZXN0cyBydW5fbW9kZWxzaW0gcnVuX3ZjcyBydW5fbmNzaW0gcnVuX3ZlcmlsYXRvciBydW5fdmVyaWxhdG9yX3dmCisKK2RlZmF1bHQ6IGNsZWFuX3Rlc3RfbGlzdCBydW5fdmVyaWxhdG9yCisKK2NsZWFuX3Rlc3RfbGlzdDoKKwlybSAtZiAkKHRlc3RfaW5mbykKKworZWNob19vdXQ6IHRlc3RzCisJQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uICIgOworCUBlY2hvICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSIKKwordGVzdHM6ICQoVEFSR0VUUykKKworJCh0ZXN0X2luZm8pOiBjbGVhbl9oZXggdGVzdHMKKwljZCAkKGJsZF9kaXIpCisKK2lzcl9zYW1wbGU6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9pc3Jfc2FtcGxlIEFSQ0g9JChBUkNIKSBJUElDPSQoSVBJQykgVkVDVF9JUlE9JChWRUNUX0lSUSkKKworZGhyeXN0b25lMjE6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2RocnlzdG9uZTIxIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCitjb3JlbWFyazogfCAkKGJsZF9kaXIpCisJLSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2NvcmVtYXJrIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCityaXNjdl9pc2E6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9pc2EgQVJDSD0kKEFSQ0gpCisKK3Jpc2N2X2NvbXBsaWFuY2U6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9jb21wbGlhbmNlIEFSQ0g9JChBUkNIKQorCitoZWxsbzogfCAkKGJsZF9kaXIpCisJLSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9oZWxsbyBFWFRfQ0ZMQUdTPSIkKEVYVF9DRkxBR1MpIiBBUkNIPSQoQVJDSCkKKworY2xlYW5faGV4OiB8ICQoYmxkX2RpcikKKwkkKFJNKSAkKGJsZF9kaXIpLyouaGV4CisKKyQoYmxkX2Rpcik6CisJbWtkaXIgLXAgJChibGRfZGlyKQorCitydW5fdmNzOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92Y3MgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJJChibGRfZGlyKS9zaW12ICAtViBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoVkNTX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCitydW5fbW9kZWxzaW06ICQodGVzdF9pbmZvKQorCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX21vZGVsc2ltIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorCWNkICQoYmxkX2Rpcik7IFwKKwl2c2ltIC1jIC1kbyAicnVuIC1hbGwiICtub3dhcm4zNjkxIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKKwkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCisJd29yay4kKHRvcF9tb2R1bGUpIFwKKwkkKE1PREVMU0lNX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnNpbSAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKKworcnVuX25jc2ltOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF9uY3NpbSBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7CisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOworCWNkICQoYmxkX2Rpcik7IFwKKwlpcnVuIFwKKwktUiBcCisJLTY0Yml0IFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKKwkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCisJJChOQ1NJTV9PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKGlydW4gLXZlcnNpb24pIFxuIiA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCisKK3J1bl92ZXJpbGF0b3I6ICQodGVzdF9pbmZvKQorCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX3ZlcmlsYXRvciBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7CisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOworCWNkICQoYmxkX2Rpcik7IFwKKwllY2hvICQodG9wX21vZHVsZSkgfCB0ZWUgJChzaW1fcmVzdWx0cyk7IFwKKwkkKGJsZF9kaXIpL3ZlcmlsYXRvci9WJCh0b3BfbW9kdWxlKSBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoVkVSSUxBVE9SX09QVFMpIHwgdGVlIC1hICQoc2ltX3Jlc3VsdHMpIDtcCisJcHJpbnRmICJTaW11bGF0aW9uIHBlcmZvcm1lZCBvbiAkJCh2ZXJpbGF0b3IgLXZlcnNpb24pIFxuIiA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCisKK3J1bl92ZXJpbGF0b3Jfd2Y6ICQodGVzdF9pbmZvKQorCSQoTUFLRSkgLUMgJChyb290X2Rpcikvc2ltIGJ1aWxkX3ZlcmlsYXRvcl93ZiBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7CisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOworCWNkICQoYmxkX2Rpcik7IFwKKwllY2hvICQodG9wX21vZHVsZSkgfCB0ZWUgJChzaW1fcmVzdWx0cyk7IFwKKwkkKGJsZF9kaXIpL3ZlcmlsYXRvci9WJCh0b3BfbW9kdWxlKSBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoVkVSSUxBVE9SX09QVFMpIHwgdGVlIC1hICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodmVyaWxhdG9yIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorY2xlYW46CisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL2JlbmNobWFya3MvZGhyeXN0b25lMjEgY2xlYW4KKwkkKE1BS0UpIC1DICQodHN0X2RpcikvcmlzY3ZfaXNhIGNsZWFuCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2NvbXBsaWFuY2UgY2xlYW4KKwkkKFJNKSAtUiAkKHJvb3RfZGlyKS9idWlsZC8qCisJJChSTSkgJCh0ZXN0X2luZm8pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvUkVBRE1FLm1kIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjY2NDgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9SRUFETUUubWQKQEAgLTAsMCArMSwxOTcgQEAKKyMgU0NSMSBSSVNDLVYgQ29yZQorCitTQ1IxIGlzIGFuIG9wZW4tc291cmNlIGFuZCBmcmVlIHRvIHVzZSBSSVNDLVYgY29tcGF0aWJsZSBNQ1UtY2xhc3MgY29yZSwgZGVzaWduZWQgYW5kIG1haW50YWluZWQgYnkgU3ludGFjb3JlLiBJdCBpcyBpbmR1c3RyeS1ncmFkZSBhbmQgc2lsaWNvbi1wcm92ZW4gKGluY2x1ZGluZyBmdWxsLXdhZmVyIHByb2R1Y3Rpb24pLCB3b3JrcyBvdXQgb2YgdGhlIGJveCBpbiBhbGwgbWFqb3IgRURBIGZsb3dzIGFuZCBWZXJpbGF0b3IsIGFuZCBjb21lcyB3aXRoIGV4dGVuc2l2ZSBjb2xsYXRlcmFsIGFuZCBkb2N1bWVudGF0aW9uLgorCishW1NDUjEgY2x1c3Rlcl0oLi9kb2NzL2ltZy9zY3IxX2NsdXN0ZXIuc3ZnKQorCisjIyBLZXkgZmVhdHVyZXMKKworKiBPcGVuIHNvdXJjZWQgdW5kZXIgU0hMLWxpY2Vuc2UgKHNlZSBMSUNFTlNFIGZpbGUpIC0gdW5yZXN0cmljdGVkIGNvbW1lcmNpYWwgdXNlIGFsbG93ZWQKKyogUlYzMkkgb3IgUlYzMkUgSVNBIGJhc2UgKyBvcHRpb25hbCBSVk0gYW5kIFJWQyBzdGFuZGFyZCBleHRlbnNpb25zCisqIE1hY2hpbmUgcHJpdmlsZWdlIG1vZGUgb25seQorKiAyIHRvIDQgc3RhZ2UgcGlwZWxpbmUKKyogT3B0aW9uYWwgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgd2l0aCAxNiBJUlEgbGluZXMKKyogT3B0aW9uYWwgUklTQy1WIERlYnVnIHN1YnN5c3RlbSB3aXRoIEpUQUcgaW50ZXJmYWNlCisqIE9wdGlvbmFsIG9uLWNoaXAgVGlnaHRseS1Db3VwbGVkIE1lbW9yeQorKiAzMi1iaXQgQVhJNC9BSEItTGl0ZSBleHRlcm5hbCBpbnRlcmZhY2UKKyogV3JpdHRlbiBpbiBTeXN0ZW1WZXJpbG9nCisqIE9wdGltaXplZCBmb3IgYXJlYSBhbmQgcG93ZXIKKyogMyBwcmVkZWZpbmVkIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zCisqIEEgbnVtYmVyIG9mIGZpbmUtdHVuaW5nIG9wdGlvbnMgZm9yIGN1c3RvbSBjb25maWd1cmF0aW9uCisqIFZlcmlmaWNhdGlvbiBzdWl0ZSBwcm92aWRlZAorKiBFeHRlbnNpdmUgZG9jdW1lbnRhdGlvbgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb3JlIGFyY2hpdGVjdHVyZSwgc2VlIFtTQ1IxIEV4dGVybmFsIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvYmxvYi9tYXN0ZXIvZG9jcy9zY3IxX2Vhcy5wZGYpLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcm9qZWN0IHVzYWdlLCBzZWUgW1NDUjEgVXNlciBNYW51YWxdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS9ibG9iL21hc3Rlci9kb2NzL3NjcjFfdW0ucGRmKS4KKworIyMgUmVwb3NpdG9yeSBjb250ZW50cworCit8Rm9sZGVyIHwgRGVzY3JpcHRpb24KK3wtLS0tLS0gfCAtLS0tLS0tLS0tLQorfCoqZGVwZW5kZW5jaWVzKiogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIHwgKipEZXBlbmRlbnQgc3VibW9kdWxlcyoqCit84pSc4pSAIHJpc2N2LXRlc3RzIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIFJJU0MtViBJU0EgdGVzdHMKK3zilJzilIAgcmlzY3YtY29tcGxpYW5jZSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIFJJU0MtViBDb21wbGlhbmNlIHRlc3RzCit84pSU4pSAIGNvcmVtYXJrIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgQ29tbW9uIHNvdXJjZSBmaWxlcyBmb3IgRUVNQkMncyBDb3JlTWFya8KuIGJlbmNobWFyaworfCoqZG9jcyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqU0NSMSBkb2N1bWVudGF0aW9uKioKK3zilJzilIAgc2NyMV9lYXMucGRmIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgU0NSMSBFeHRlcm5hbCBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbgorfOKUlOKUgCBzY3IxX3VtLnBkZiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAgfCBTQ1IxIFVzZXIgTWFudWFsCit8KipzaW0qKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipUZXN0cyBhbmQgc2NyaXB0cyBmb3Igc2ltdWxhdGlvbioqCit84pSc4pSAIHRlc3RzL2NvbW1vbiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IENvbW1vbiBzb3VyY2UgZmlsZXMgZm9yIHRlc3RzCit84pSc4pSAIHRlc3RzL3Jpc2N2X2lzYSDCoCDCoCDCoCDCoCDCoCDCoCDCoCAgfCBSSVNDLVYgSVNBIHRlc3RzIHBsYXRmb3JtIHNwZWNpZmljIHNvdXJjZSBmaWxlcworfOKUnOKUgCB0ZXN0cy9yaXNjdl9jb21wbGlhbmNlIMKgIMKgIMKgIMKgIHwgUklTQy1WIENvbXBsaWFuY2UgcGxhdGZvcm0gc3BlY2lmaWMgc291cmNlIGZpbGVzCit84pSc4pSAIHRlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEgwqAgfCBEaHJ5c3RvbmUgMi4xIGJlbmNobWFyayBzb3VyY2UgZmlsZXMKK3zilJzilIAgdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyayDCoCDCoCAgfCBFRU1CQydzIENvcmVNYXJrwq4gYmVuY2htYXJrIHBsYXRmb3JtIHNwZWNpZmljIHNvdXJjZSBmaWxlcworfOKUnOKUgCB0ZXN0cy9pc3Jfc2FtcGxlIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgU2FtcGxlIHByb2dyYW0gIkludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUiCit84pSc4pSAIHRlc3RzL2hlbGxvICAgICAgICAgICAgICAgICAgICB8IFNhbXBsZSBwcm9ncmFtICJIZWxsbyIKK3zilJTilIAgdmVyaWxhdG9yX3dyYXAgICAgICAgICAgICAgICAgIHwgV3JhcHBlcnMgZm9yIFZlcmlsYXRvciBzaW11bGF0aW9uCit8KipzcmMqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipTQ1IxIFJUTCBzb3VyY2UgYW5kIHRlc3RiZW5jaCBmaWxlcyoqCit84pSc4pSAIGluY2x1ZGVzICAgICAgICAgICAgICAgICAgICAgICB8IEhlYWRlciBmaWxlcworfOKUnOKUgCBjb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3JlIHRvcCBzb3VyY2UgZmlsZXMKK3zilJzilIAgdG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2x1c3RlciBzb3VyY2UgZmlsZXMKK3zilJTilIAgdGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdGJlbmNoIGZpbGVzCisKKyMjIFNDUjEgc291cmNlIGZpbGUgbGlzdHMKKworU0NSMSBzb3VyY2UgZmlsZSBsaXN0cyBvZiBTQ1IxIGNhbiBiZSBmb3VuZCBpbiBbLi9zcmNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS90cmVlL21hc3Rlci9zcmMpOgorCisqICoqY29yZS5maWxlcyoqICAgIC0gYWxsIHN5bnRoZXNpemVkIGZpbGUgc291cmNlcyBvZiB0aGUgU0NSMSBjb3JlCisqICoqYWhiX3RvcC5maWxlcyoqIC0gc3ludGhlc2l6ZWQgZmlsZSBzb3VyY2VzIG9mIEFIQiBjbHVzdGVyCisqICoqYXhpX3RvcC5maWxlcyoqIC0gc3ludGhlc2l6ZWQgZmlsZSBzb3VyY2VzIG9mIEFYSSBjbHVzdGVyCisqICoqYWhiX3RiLmZpbGVzKiogIC0gdGVzdGJlbmNoIGZpbGUgc291cmNlcyBmb3IgQUhCIGNsdXN0ZXIgKGZvciBzaW11bGF0aW9uIG9ubHkpCisqICoqYXhpX3RiLmZpbGVzKiogIC0gdGVzdGJlbmNoIGZpbGUgc291cmNlcyBmb3IgQVhJIGNsdXN0ZXIgKGZvciBzaW11bGF0aW9uIG9ubHkpCisKK0xpYnJhcnkgd2l0aCBoZWFkZXIgZmlsZXMgdG8gaW5jbHVkZSBpcyBbLi9zcmMvaW5jbHVkZXMvXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvdHJlZS9tYXN0ZXIvc3JjL2luY2x1ZGVzKQorCisjIyBTaW11bGF0aW9uIHF1aWNrIHN0YXJ0IGd1aWRlCisKK1RoZSBwcm9qZWN0IGNvbnRhaW5zIHRlc3RiZW5jaGVzLCB0ZXN0IHNvdXJjZXMgYW5kIHNjcmlwdHMgdG8gcXVpY2tseSBzdGFydCB0aGUgU0NSMSBzaW11bGF0aW9uLiBCZWZvcmUgc3RhcnRpbmcgdGhlIHNpbXVsYXRpb24sIG1ha2Ugc3VyZSB5b3UgaGF2ZToKKworKiBpbnN0YWxsZWQgUklTQy1WIEdDQyB0b29sY2hhaW4sCisqIGluc3RhbGxlZCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBzaW11bGF0b3JzLAorKiBpbml0aWFsaXplZCBzdWJtb2R1bGVzIHdpdGggdGVzdCBzb3VyY2VzLgorCisjIyMgUmVxdWlyZW1lbnRzCisKKyMjIyMgT3BlcmF0aW5nIHN5c3RlbQorCitHQ0MgdG9vbGNoYWluIGFuZCBtYWtlLXNjcmlwdHMgYXJlIHN1cHBvcnRlZCBieSBtb3N0IHBvcHVsYXIgTGludXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcy4KKworVG8gcnVuIGZyb20gV2luZG93cyB5b3UgY2FuIHVzZSBhbiBhZGRpdGlvbmFsIGNvbXBhdGliaWxpdHkgbGF5ZXIsIHN1Y2ggYXMgV1NMIG9yIEN5Z3dpbi4KKworIyMjIyBSSVNDLVYgR0NDIHRvb2xjaGFpbgorCitSSVNDLVYgR0NDIHRvb2xjaGFpbiBpcyByZXF1aXJlZCB0byBjb21waWxlIHRoZSBzb2Z0d2FyZS4gWW91IGNhbiB1c2UgcHJlLWJ1aWx0IGJpbmFyaWVzIG9yIGJ1aWxkIHRoZSB0b29sY2hhaW4gZnJvbSBzY3JhdGNoLgorCisjIyMjIyBVc2luZyBwcmUtYnVpbHQgYmluYXJ5IHRvb2xzCisKK1ByZS1idWlsdCBSSVNDLVYgR0NDIHRvb2xjaGFpbiB3aXRoIHN1cHBvcnQgZm9yIGFsbCBTQ1IxIGFyY2hpdGVjdHVyYWwgY29uZmlndXJhdGlvbnMgaXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIGh0dHA6Ly9zeW50YWNvcmUuY29tL3BhZ2UvcHJvZHVjdHMvc3ctdG9vbHMuCisKKzEuIERvd25sb2FkIHRoZSBhcmNoaXZlIGZvciB5b3VyIHBsYXRmb3JtLgorMi4gRXh0cmFjdCB0aGUgYXJjaGl2ZSB0byBwcmVmZXJyZWQgZGlyZWN0b3J5IGA8R0NDX0lOU1RBTExfUEFUSD5gLgorMy4gQWRkIHRoZSBgPEdDQ19JTlNUQUxMX1BBVEg+L2JpbmAgZm9sZGVyIHRvIHRoZSAkUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZToKK2BgYAorICAgIGV4cG9ydCBQQVRIPTxHQ0NfSU5TVEFMTF9QQVRIPi9iaW46JFBBVEgKK2BgYAorCisjIyMjIyBCdWlsZGluZyB0b29scyBmcm9tIHNvdXJjZQorCitZb3UgY2FuIGJ1aWxkIHRoZSBSSVNDLVYgR0NDIHRvb2xjaGFpbiBmcm9tIHNvdXJjZXMsIHN0b3JlZCBpbiBvZmZpY2lhbCByZXBvIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi1nbnUtdG9vbGNoYWluCisKK0luc3RydWN0aW9ucyBvbiBob3cgdG8gcHJlcGFyZSBhbmQgYnVpbGQgdGhlIHRvb2xjaGFpbiBjYW4gYmUgZm91bmQgb24gaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWdudS10b29sY2hhaW4vYmxvYi9tYXN0ZXIvUkVBRE1FLm1kCisKK1dlIHJlY29tbWVuZCB1c2luZyB0aGUgbXVsdGlsaWIgY29tcGlsZXIuIFBsZWFzZSBub3RlIHRoYXQgUlYzMklDLCBSVjMyRSwgUlYzMkVNLCBSVjMyRU1DLCBSVjMyRUMgYXJjaGl0ZWN0dXJhbCBjb25maWd1cmF0aW9ucyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBjb21waWxlciBieSBkZWZhdWx0LiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlbSwgeW91IHdpbGwgbmVlZCB0byBpbmNsdWRlIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMgYnkgeW91cnNlbGYgYmVmb3JlIGJ1aWxkaW5nLgorCitBZnRlciB0aGUgYnVpbGRpbmcsIGJlIHN1cmUgdG8gYWRkIHRoZSBgPEdDQ19JTlNUQUxMX1BBVEg+L2JpbmAgZm9sZGVyIHRvIHRoZSAkUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZQorCisKKyMjIyMgSERMIHNpbXVsYXRvcnMKKworQ3VycmVudGx5IHN1cHBvcnRlZCBzaW11bGF0b3JzOgorCisqIFZlcmlsYXRvciAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiB2NC4xMDIpCisqIEludGVsIE1vZGVsU2ltIChsYXN0IHZlcmlmaWVkIHZlcnNpb246IElOVEVMIEZQR0EgU1RBUlRFUiBFRElUSU9OIHZzaW0gMjAyMC4xXzMpCisqIE1lbnRvciBHcmFwaGljcyBNb2RlbFNpbSAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiBNb2RlbHNpbSBQRSBTdHVkZW50IEVkaXRpb24gMTAuNGEpCisqIFN5bm9wc3lzIFZDUyAobGFzdCB2ZXJpZmllZCB2ZXJzaW9uOiB2Y3MtbXhfdkwtMjAxNi4wNikKKyogQ2FkZW5jZSBOQ1NpbQorCitQbGVhc2Ugbm90ZSB0aGF0IFJUTCBzaW11bGF0b3IgZXhlY3V0YWJsZXMgc2hvdWxkIGJlIGluIHlvdXIgJFBBVEggdmFyaWFibGUuCisKKyMjIyMgVGVzdHMgcHJlcGFyYXRpb24KKworVGhlIHNpbXVsYXRpb24gcGFja2FnZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHRlc3RzOgorCisqICoqaGVsbG8qKiAtICJIZWxsbyIgc2FtcGxlIHByb2dyYW0KKyogKippc3Jfc2FtcGxlKiogLSAiSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSIgc2FtcGxlIHByb2dyYW0KKyogKipyaXNjdl9pc2EqKiAtIFJJU0MtViBJU0EgdGVzdHMgKHN1Ym1vZHVsZSkKKyogKipyaXNjdl9jb21wbGlhbmNlKiogLSBSSVNDLVYgQ29tcGxpYW5jZSB0ZXN0cyAoc3VibW9kdWxlKQorKiAqKmRocnlzdG9uZTIxKiogLSBEaHJ5c3RvbmUgMi4xIGJlbmNobWFyaworKiAqKmNvcmVtYXJrKiogLSBFRU1CQydzIENvcmVNYXJrwq4gYmVuY2htYXJrIChzdWJtb2R1bGUpCisKK0FmdGVyIHRoZSBtYWluIFNDUjEgcmVwb3NpdG9yeSBoYXMgYmVlbiBjbG9uZWQgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CitgYGAKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKK2BgYAorCitUaGlzIGNvbW1hbmQgd2lsbCBpbml0aWFsaXplZCBzdWJtb2R1bGVzIHdpdGggdGVzdCBzb3VyY2VzLgorCisjIyMgUnVubmluZyBzaW11bGF0aW9uCisKK1RvIGJ1aWxkIFJUTCwgY29tcGlsZSBhbmQgcnVuIHRlc3RzIGZyb20gdGhlIHJlcG8gcm9vdCBmb2xkZXIgeW91IGhhdmUgdG8gY2FsbCBNYWtlZmlsZS4KK0J5IGRlZmF1bHQsIHlvdSBtYXkgc2ltcGx5IGNhbGwgTWFrZWZpbGUgd2l0aG91dCBhbnkgcGFyYW1ldGVyczoKK2BgYCBzaAorIMKgIMKgbWFrZQorYGBgCisKK0luIHRoaXMgY2FzZSBzaW11bGF0aW9uIHdpbGwgcnVuIG9uIFZlcmlsYXRvciB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiBgQ0ZHPU1BWCBCVVM9QUhCIFRSQUNFPTAgVEFSR0VUUz0iaGVsbG8gaXNyX3NhbXBsZSByaXNjdl9pc2EgcmlzY3ZfY29tcGxpYW5jZSBkaHJ5c3RvbmUyMSBjb3JlbWFyayJgLgorCitNYWtlZmlsZSBzdXBwb3J0czoKKworKiBjaG9pY2Ugb2Ygc2ltdWxhdG9yIC0gYHJ1bl88U0lNVUxBVE9SPiA9IDxydW5fdmNzLCBydW5fbW9kZWxzaW0sIHJ1bl9uY3NpbSwgcnVuX3ZlcmlsYXRvciwgcnVuX3ZlcmlsYXRvcl93Zj5gCisqIHNlbGVjdGlvbiBvZiBleHRlcm5hbCBpbnRlcmZhY2UgLSBgQlVTID0gPEFIQiwgQVhJPmAsCisqIGNvbmZpZ3VyYXRpb24gc2V0dXAgLSBgQ0ZHID0gPE1BWCwgQkFTRSwgTUlOLCBDVVNUT00+YCwKKyogcGFyYW1ldGVycyBmb3IgQ1VTVE9NIGNvbmZpZ3VyYXRpb24gLSBgQVJDSCA9IDxJTUMsIElDLCBJTSwgSSwgRU1DLCBFTSwgRUMsIEU+LCBWRUNUX0lSUSA9IDwwLCAxPiwgSVBJQyA9IDwwLCAxPiwgVENNID0gPDAsIDE+YAorKiB0ZXN0cyBzdWJzZXQgdG8gcnVuIC0gYFRBUkdFVFMgPSA8aGVsbG8sIGlzcl9zYW1wbGUsIHJpc2N2X2lzYSwgcmlzY3ZfY29tcGxpYW5jZSwgZGhyeXN0b25lMjEsIGNvcmVtYXJrPmAKKyogZW5hYmxpbmcgdHJhY2Vsb2cgLSBgVFJBQ0UgPSA8MCwgMT5gCisqIGFuZCBhbnkgYWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHNpbXVsYXRvciAtIGBTSU1fQlVJTERfT1BUU2AuCisKK0V4YW1wbGVzOgorYGBgIHNoCisgwqAgwqBtYWtlIHJ1bl92ZXJpbGF0b3Jfd2YgQ0ZHPU1BWCBCVVM9QVhJIFRBUkdFVFM9InJpc2N2X2lzYSByaXNjdl9jb21wbGlhbmNlIiBUUkFDRT0xCisgwqAgwqBtYWtlIHJ1bl92Y3MgQ0ZHPUJBU0UgQlVTPUFIQiBUQVJHRVRTPSJkaHJ5c3RvbmUyMSBjb3JlbWFyayIgU0lNX0JVSUxEX09QVFM9Ii1ndWkiCisgwqAgwqBtYWtlIHJ1bl9tb2RlbHNpbSBDRkc9Q1VTVE9NIEJVUz1BWEkgQVJDSD1JIFZFQ1RfSVJRPTEgSVBJQz0xIFRDTT0wIFRBUkdFVFM9aXNyX3NhbXBsZQorYGBgCisKK0J1aWxkIGFuZCBydW4gcGFyYW1ldGVycyBjYW4gYmUgY29uZmlndXJlZCBpbiB0aGUgYC4vTWFrZWZpbGVgLgorCitBZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgZmluaXNoZWQsIHRoZSByZXN1bHRzIGNhbiBiZSBmb3VuZCBpbiBgYnVpbGQvPFNJTV9DRkc+L3Rlc3RfcmVzdWx0cy50eHRgLgorCisqKklNUE9SVEFOVDoqKiBUbyBlbnN1cmUgY29ycmVjdCByZWJ1aWxkLCBwbGVhc2UgY2xlYW4gYnVpbGQgZGlyZWN0b3J5IGJldHdlZW4gc2ltdWxhdGlvbiBydW5zOgorYGBgIHNoCisgwqAgIG1ha2UgY2xlYW4KK2BgYAorCitQbGVhc2UgcmVmZXIgdG8gdGhlICoiU2ltdWxhdGlvbiBlbnZpcm9ubWVudCIqIGNoYXB0ZXIgb2YgdGhlIFtTQ1IxIFVzZXIgTWFudWFsXShodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEvYmxvYi9tYXN0ZXIvZG9jcy9zY3IxX3VtLnBkZikgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIHNpbXVsYXRpb24gcnVuLgorCisjIyBTQ1IxIFNES3MKKworRlBHQS1iYXNlZCBTREtzIGFyZSBhdmFpbGFibGUgYXQgdGhlIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEtc2RrPi4KKworUmVwbyBjb250YWluczoKKworKiBQcmUtYnVpbGQgaW1hZ2VzIGFuZCBvcGVuIGRlc2lnbnMgZm9yIHNldmVyYWwgc3RhbmRhcmQgRlBHQXMgYm9hcmRzOgorICAqIERpZ2lsZW50IEFydHkgKFhpbGlueCkKKyAgKiBEaWdpbGVudCBOZXh5cyA0IEREUiAoWGlsaW54KQorICAqIEFycmlhIFYgR1ggU3RhcnRlciAoSW50ZWwpCisgICogVGVyYXNpYyBERTEwLUxpdGUgKEludGVsKQorKiBTb2Z0d2FyZSBwYWNrYWdlOgorICAqIEJvb3Rsb2FkZXIKKyAgKiBaZXBoeXIgUlRPUworICAqIFRlc3RzXFNXIHNhbXBsZXMKKyogVXNlciBHdWlkZXMgZm9yIFNES3MgYW5kIHRvb2xzCisKKyMjIENvbnRhY3RzCisKK1JlcG9ydCBhbiBpc3N1ZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMS9pc3N1ZXM+CisKK0FzayBhIHF1ZXN0aW9uOiBzY3IxQHN5bnRhY29yZS5jb20KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL2RvY3MvaW1nL3NjcjFfY2x1c3Rlci5zdmcgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9kb2NzL2ltZy9zY3IxX2NsdXN0ZXIuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YWYyMzgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9kb2NzL2ltZy9zY3IxX2NsdXN0ZXIuc3ZnCkBAIC0wLDAgKzEsNjE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KKzwhLS0g0KHQvtC30LTQsNC90L4gTWljcm9zb2Z0IFZpc2lvLCDRjdC60YHQv9C+0YDRgiBTVkcgc2NyMV9jbHVzdGVyLnN2ZyBzY3IxX2NsdXN0ZXIgLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpldj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIg0KKwkJeG1sbnM6dj0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS92aXNpby8yMDAzL1NWR0V4dGVuc2lvbnMvIiB3aWR0aD0iNS43Mzk1OGluIiBoZWlnaHQ9IjUuMTE0NThpbiINCisJCXZpZXdCb3g9IjAgMCA0MTMuMjUgMzY4LjI1IiB4bWw6c3BhY2U9InByZXNlcnZlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIGNsYXNzPSJzdDEyIj4NCisJPHY6ZG9jdW1lbnRQcm9wZXJ0aWVzIHY6bGFuZ0lEPSIyMDU3IiB2OnZpZXdNYXJrdXA9ImZhbHNlIi8+DQorDQorCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQorCTwhW0NEQVRBWw0KKwkJLnN0MSB7ZmlsbDojZGNlZGZhO3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjAuNzV9DQorCQkuc3QyIHtmaWxsOiNiMWRkZjA7c3Ryb2tlOiMyNDM3NDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2Utd2lkdGg6MC43NX0NCisJCS5zdDMge2ZpbGw6I2IwZTNlNjtzdHJva2U6IzI0Mzc0MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS13aWR0aDowLjc1fQ0KKwkJLnN0NCB7ZmlsbDpub25lfQ0KKwkJLnN0NSB7c3Ryb2tlOiMyNDM3NDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2Utd2lkdGg6MS41fQ0KKwkJLnN0NiB7ZmlsbDojMjQzNzQwO3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjEuNX0NCisJCS5zdDcge2ZpbGw6bm9uZTtzdHJva2U6bm9uZTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS13aWR0aDowLjc1fQ0KKwkJLnN0OCB7ZmlsbDojMjQzNzQwO2ZvbnQtZmFtaWx5OkNhbGlicmk7Zm9udC1zaXplOjAuNzVlbTtmb250LXdlaWdodDpib2xkfQ0KKwkJLnN0OSB7ZmlsbDojMjQzNzQwO2ZvbnQtZmFtaWx5OkNhbGlicmk7Zm9udC1zaXplOjAuODMzMzM2ZW07Zm9udC13ZWlnaHQ6Ym9sZH0NCisJCS5zdDEwIHtmaWxsOiMwYzBjMGM7Zm9udC1mYW1pbHk6Q2FsaWJyaTtmb250LXNpemU6MC44MzMzMzZlbTtmb250LXdlaWdodDpib2xkfQ0KKwkJLnN0MTEge2ZvbnQtc2l6ZToxZW19DQorCQkuc3QxMiB7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93OnZpc2libGU7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1taXRlcmxpbWl0OjN9DQorCV1dPg0KKwk8L3N0eWxlPg0KKw0KKwk8ZyB2Om1JRD0iMCIgdjppbmRleD0iMSIgdjpncm91cENvbnRleHQ9ImZvcmVncm91bmRQYWdlIj4NCisJCTx0aXRsZT5zY3IxX2NsdXN0ZXI8L3RpdGxlPg0KKwkJPHY6cGFnZVByb3BlcnRpZXMgdjpkcmF3aW5nU2NhbGU9IjEiIHY6cGFnZVNjYWxlPSIxIiB2OmRyYXdpbmdVbml0cz0iMTkiIHY6c2hhZG93T2Zmc2V0WD0iOSIgdjpzaGFkb3dPZmZzZXRZPSItOSIvPg0KKwkJPGcgaWQ9InNoYXBlMi0xIiB2Om1JRD0iMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MC4zNzUsLTMwLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4yPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNTYuNTUgQTExLjcwMDMgMTEuNzAwMyAtMTgwIDAgMCAxMS43IDM2OC4yNSBMMjgwLjggMzY4LjI1IEExMS43MDAzIDExLjcwMDMgLTE4MCAwIDAgMjkyLjUgMzU2LjU1IEwyOTIuNQ0KKwkJCQkJCSA0Mi40NSBBMTEuNzAwMyAxMS43MDAzIC0xODAgMCAwIDI4MC44IDMwLjc1IEwxMS43IDMwLjc1IEExMS43MDAzIDExLjcwMDMgLTE4MCAwIDAgMCA0Mi40NSBMMCAzNTYuNTUgWiINCisJCQkJCWNsYXNzPSJzdDEiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTMtMyIgdjptSUQ9IjMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjcuODc1LC0yMTAuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjM8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2Mi44NSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDUuNCAzNjguMjUgTDI3Mi4xIDM2OC4yNSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDI3Ny41IDM2Mi44NSBMMjc3LjUgMjM4LjY1DQorCQkJCQkJIEE1LjQwMDEzIDUuNDAwMTMgLTE4MCAwIDAgMjcyLjEgMjMzLjI1IEw1LjQgMjMzLjI1IEE1LjQwMDEzIDUuNDAwMTMgLTE4MCAwIDAgMCAyMzguNjUgTDAgMzYyLjg1IFoiDQorCQkJCQljbGFzcz0ic3QyIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU0LTUiIHY6bUlEPSI0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtMjE3Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi40PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTUtNyIgdjptSUQ9IjUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQyLjg3NSwtMjE3Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi41PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTYtOSIgdjptSUQ9IjYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEwLjM3NSwtMjE3Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi42PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTctMTEiIHY6bUlEPSI3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Ny44NzUsLTIxNy44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU4LTEzIiB2Om1JRD0iOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNDIuODc1LC0yNTUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjg8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlOS0xNSIgdjptSUQ9IjkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0yNTUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjk8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTAtMTciIHY6bUlEPSIxMCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTAuMzc1LC0yNTUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjEwPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTExLTE5IiB2Om1JRD0iMTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTIuMzA1LC0zMDcuNjM1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjExPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMTYuMTQgMzY4LjAxIEw4LjA3IDM2OC4wMSBMOC4wNyAzNjguMjMgTDAgMzY4LjI1IEwxNi4xNCAzNjguMDEgWiIgY2xhc3M9InN0NCIvPg0KKwkJCTxwYXRoIGQ9Ik0xNi4xNCAzNjguMDEgTDguMDcgMzY4LjAxIEw4LjA3IDM2OC4yMyBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEyLTIyIiB2Om1JRD0iMTIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjguNDQ1LC0zMDUuMjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTI8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik01LjI1IDM2NS42MiBMMCAzNjguMjUgTDAgMzYzIEw1LjI1IDM2NS42MiBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUxMy0yNCIgdjptSUQ9IjEzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ3LjA1NSwtMzA1LjAxKSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjEzPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjUuNjMgTDUuMjQgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjUuNjMgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTQtMjYiIHY6bUlEPSIxNCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NS4zNzUsLTI5Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTQ8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAtMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTE1LTI4IiB2Om1JRD0iMTUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3Ljg3NSwtMjU1LjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4xNTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDENCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUxNi0zMCIgdjptSUQ9IjE2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0Mi44NzUsLTI5Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTY8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxDQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAtMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTE3LTMyIiB2Om1JRD0iMTciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjgwNSwtMzA3LjYzNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4xNzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMzY4LjAxIEw4LjA3IDM2OC4wMSBMOC4wNyAzNjguMjMgTDE2LjE0IDM2OC4yNSBMMCAzNjguMDEgWiIgY2xhc3M9InN0NCIvPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2OC4wMSBMOC4wNyAzNjguMDEgTDguMDcgMzY4LjIzIEwxNi4xNCAzNjguMjUiIGNsYXNzPSJzdDUiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTE4LTM1IiB2Om1JRD0iMTgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzM5LjU1NSwtMzA1LjI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjE4PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjUuNjIgTDUuMjUgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjUuNjIgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTktMzciIHY6bUlEPSIxOSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNjAuOTQ1LC0zMDUuMDEpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTk8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik01LjI1IDM2NS42MyBMMCAzNjguMjUgTDAuMDEgMzYzIEw1LjI1IDM2NS42MyBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyMC0zOSIgdjptSUQ9IjIwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Ny44NzUsLTI5Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMjA8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0tMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyMS00MSIgdjptSUQ9IjIxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMC4zNzUsLTI5Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMjE8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0tMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQ0KKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyMi00MyIgdjptSUQ9IjIyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MC4zNzUsLTEyMy4zNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMjI8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2MC4zNyBBNy44NzUxOCA3Ljg3NTE4IC0xODAgMCAwIDcuODcgMzY4LjI1IEwxMDQuNjIgMzY4LjI1IEE3Ljg3NTE4IDcuODc1MTggLTE4MCAwIDAgMTEyLjUgMzYwLjM3IEwxMTIuNQ0KKwkJCQkJCSAzMjMuNjMgQTcuODc1MTggNy44NzUxOCAtMTgwIDAgMCAxMDQuNjIgMzE1Ljc1IEw3Ljg3IDMxNS43NSBBNy44NzUxOCA3Ljg3NTE4IC0xODAgMCAwIDAgMzIzLjYzIEwwIDM2MC4zNw0KKwkJCQkJCSBaIiBjbGFzcz0ic3QyIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyMy00NSIgdjptSUQ9IjIzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5NS4zNzUsLTg1Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4yMzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTS0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw2MyAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjcuNSAzNjMuNzUgTDY3LjUgMzQyLjc1IEE0LjUwMDENCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDYzIDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAtMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDIiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTI0LTQ3IiB2Om1JRD0iMjQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTIwLjM3NSwtMTQ5LjYyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4yNDwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMzU5LjQzIEwwIDM2OC4yNSBMMjMuMDcgMzY4LjI1IEwwIDM1OS40MyBaIiBjbGFzcz0ic3Q0Ii8+DQorCQkJPHBhdGggZD0iTTAgMzU5LjQzIEwwIDM2OC4yNSBMMjMuMDcgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyNS01MCIgdjptSUQ9IjI1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExNy43NSwtMTU4LjQ0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4yNTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTI2LTUyIiB2Om1JRD0iMjYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQzLjQ0NSwtMTQ3KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjI2PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNNS4yNSAzNjUuNjMgTDAgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjUuNjMgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMjctNTQiIHY6bUlEPSIyNyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDUuMzc1LC0yMDIuMzA1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjI3PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDAgMzU5LjYxIEwwIDM2OC4yNSBaIiBjbGFzcz0ic3Q0Ii8+DQorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDM1OS42MSIgY2xhc3M9InN0NSIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMjgtNTciIHY6bUlEPSIyOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDIuNzUsLTE5Ny4wNTUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMjg8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUyOS01OSIgdjptSUQ9IjI5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMi43NSwtMjEwLjk0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4yOTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTMwLTYxIiB2Om1JRD0iMzAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0xNjUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjMwPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDEyIDMzOC4yNSBMNDggMzM4LjI1IEw2MCAzNjguMjUgTDAgMzY4LjI1IFoiIGNsYXNzPSJzdDIiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTMxLTYzIiB2Om1JRD0iMzEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY5LjgwNSwtMTQ5LjYyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4zMTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIzLjA3IDM1OS40MyBMMjMuMDcgMzY4LjI1IEwwIDM2OC4yNSBMMjMuMDcgMzU5LjQzIFoiIGNsYXNzPSJzdDQiLz4NCisJCQk8cGF0aCBkPSJNMjMuMDcgMzU5LjQzIEwyMy4wNyAzNjguMjUgTDAgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUzMi02NiIgdjptSUQ9IjMyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5MC4yNSwtMTU4LjQ0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4zMjwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTMzLTY4IiB2Om1JRD0iMzMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY0LjU1NSwtMTQ3KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjMzPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjUuNjMgTDUuMjUgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjUuNjMgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMzQtNzAiIHY6bUlEPSIzNCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC0xNjUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjM0PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDEyIDMzOC4yNSBMNDggMzM4LjI1IEw2MCAzNjguMjUgTDAgMzY4LjI1IFoiIGNsYXNzPSJzdDIiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTM1LTcyIiB2Om1JRD0iMzUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA3Ljg3NSwtMjAyLjMwNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4zNTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMzU5LjYxIEwwIDM2OC4yNSBMMCAzNTkuNjEgWiIgY2xhc3M9InN0NCIvPg0KKwkJCTxwYXRoIGQ9Ik0wIDM1OS42MSBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTM2LTc1IiB2Om1JRD0iMzYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0yMTAuOTQ1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjM2PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMi42MyAzNjMgTDUuMjUgMzY4LjI1IEwwIDM2OC4yNSBMMi42MyAzNjMgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMzctNzciIHY6bUlEPSIzNyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDUuMjUsLTE5Ny4wNTUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMzc8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUzOC03OSIgdjptSUQ9IjM4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS44MDUsLTEwMC44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMzg8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2OC4yNSBMMzguMDcgMzY4LjI1IEwzOC4wNyAzMTAuNjggTDAgMzY4LjI1IFoiIGNsYXNzPSJzdDQiLz4NCisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDM4LjA3IDM2OC4yNSBMMzguMDcgMzEwLjY4IiBjbGFzcz0ic3Q1Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUzOS04MiIgdjptSUQ9IjM5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2NC41NTUsLTk4LjI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjM5PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjUuNjIgTDUuMjUgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjUuNjIgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNDAtODQiIHY6bUlEPSI0MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDUuMjUsLTE1OC40NDUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNDA8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU0MS04NiIgdjptSUQ9IjQxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtODkuODA1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjQxPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDAgMjk5LjYxIEwwIDM2OC4yNSBaIiBjbGFzcz0ic3Q0Ii8+DQorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDI5OS42MSIgY2xhc3M9InN0NSIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNDItODkiIHY6bUlEPSI0MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ny43NSwtODQuNTU1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjQyPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNDMtOTEiIHY6bUlEPSI0MyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ny43NSwtMTU4LjQ0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi40MzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTQ0LTkzIiB2Om1JRD0iNDQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC00NS4zNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNDQ8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM2Mi42MiBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDUuNjMgMzY4LjI1IEw1NC4zOCAzNjguMjUgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA2MCAzNjIuNjIgTDYwIDMzNi4zOA0KKwkJCQkJCSBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDU0LjM4IDMzMC43NSBMNS42MiAzMzAuNzUgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCAwIDMzNi4zOCBMMCAzNjIuNjIgWiINCisJCQkJCWNsYXNzPSJzdDIiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTQ1LTk1IiB2Om1JRD0iNDUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3Ljg3NSwtNDUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjQ1PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNjIuNjIgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA1LjYzIDM2OC4yNSBMNTQuMzggMzY4LjI1IEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNjAgMzYyLjYyIEw2MCAzMzYuMzgNCisJCQkJCQkgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA1NC4zOCAzMzAuNzUgTDUuNjIgMzMwLjc1IEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgMCAzMzYuMzggTDAgMzYyLjYyIFoiDQorCQkJCQljbGFzcz0ic3QyIi8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU0Ni05NyIgdjptSUQ9IjQ2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyMi44NzUsLTg5LjgwNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi40NjwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTAgMjk5LjYxIEwwIDM2OC4yNSBMMCAyOTkuNjEgWiIgY2xhc3M9InN0NCIvPg0KKwkJCTxwYXRoIGQ9Ik0wIDI5OS42MSBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTQ3LTEwMCIgdjptSUQ9IjQ3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyMC4yNSwtMTU4LjQ0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi40NzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTQ4LTEwMiIgdjptSUQ9IjQ4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyMC4yNSwtODQuNTU1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjQ4PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNDktMTA0IiB2Om1JRD0iNDkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzY3Ljg3NSwtMzAwLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi40OTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iNDUiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTUwLTEwNiIgdjptSUQ9IjUwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM1NC4zNSwtMzAyLjkyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi41MDwvdGl0bGU+DQorCQkJPGRlc2M+SlRBRyBJL0Y8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSIzNi4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI3Mi4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNzIuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjIwLjUiIHk9IjM2NS41NSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5KVEFHIEkvRjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTUxLTEwOSIgdjptSUQ9IjUxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMzc1LC0zMDAuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjUxPC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI0NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNTItMTExIiB2Om1JRD0iNTIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTguNjUsLTMwMi45MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNTI8L3RpdGxlPg0KKwkJCTxkZXNjPklSUSBJL0Y8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSIzMS41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjE4LjQ5IiB5PSIzNjUuNTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SVJRIEkvRjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTUzLTExNCIgdjptSUQ9IjUzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY3Ljg3NSwtMC4zNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNTM8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9Ijc1IiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU1NC0xMTYiIHY6bUlEPSI1NCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NS44NSwtMi45MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNTQ8L3RpdGxlPg0KKwkJCTxkZXNjPkFIQi9BWEkgSS9GPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDkuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iOTkuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9Ijk5LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIyNC4zNyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkFIQi9BWEkgSS9GPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNTUtMTE5IiB2Om1JRD0iNTUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA1LjM3NSwtMjIuMzA1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjU1PC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMCAzNTIuMTEgTDAgMzY4LjI1IEwwIDM1Mi4xMSBaIiBjbGFzcz0ic3Q0Ii8+DQorCQkJPHBhdGggZD0iTTAgMzUyLjExIEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNTYtMTIyIiB2Om1JRD0iNTYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAyLjc1LC0zOC40NDUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNTY8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU1Ny0xMjQiIHY6bUlEPSI1NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDIuNzUsLTE3LjA1NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi41NzwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjMgTDIuNjMgMzY4LjI1IFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTU4LTEyNiIgdjptSUQ9IjU4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3MC4zNzUsLTAuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjU4PC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI3NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNTktMTI4IiB2Om1JRD0iNTkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjU4LjM1LC0yLjkyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi41OTwvdGl0bGU+DQorCQkJPGRlc2M+QUhCL0FYSSBJL0Y8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0OS41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI5OS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iOTkuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjI0LjM3IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+QUhCL0FYSSBJL0Y8L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2MC0xMzEiIHY6bUlEPSI2MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDcuODc1LC0yMi4zMDUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNjA8L3RpdGxlPg0KKwkJCTxwYXRoIGQ9Ik0wIDM1Mi4xMSBMMCAzNjguMjUgTDAgMzUyLjExIFoiIGNsYXNzPSJzdDQiLz4NCisJCQk8cGF0aCBkPSJNMCAzNTIuMTEgTDAgMzY4LjI1IiBjbGFzcz0ic3Q1Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2MS0xMzQiIHY6bUlEPSI2MSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDUuMjUsLTM4LjQ0NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi42MTwvdGl0bGU+DQorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTYyLTEzNiIgdjptSUQ9IjYyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwNS4yNSwtMTcuMDU1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjYyPC90aXRsZT4NCisJCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNjMtMTM4IiB2Om1JRD0iNjMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjcuODc1LC0zNDkuMTI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjYzPC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI4Mi41IiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2NC0xNDAiIHY6bUlEPSI2NCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Mi42NzUsLTM1MS40NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi42NDwvdGl0bGU+DQorCQkJPGRlc2M+U0NSMSBjbHVzdGVyPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDMuMzI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODYuNjUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9Ijg2LjY1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIwIiB5PSIzNjUuODUiIGNsYXNzPSJzdDEwIiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoLz48djp0YWJMaXN0Lz5TQ1IxIGNsdXN0ZXI8L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2NS0xNDMiIHY6bUlEPSI2NSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NS4zNzUsLTMyNi42MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNjU8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9Ijc1IiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2Ni0xNDUiIHY6bUlEPSI2NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Ni44NSwtMzI5LjE3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi42NjwvdGl0bGU+DQorCQkJPGRlc2M+U0NSMSBjb3JlPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIwIiB5PSIzNjUuODUiIGNsYXNzPSJzdDEwIiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoLz48djp0YWJMaXN0Lz5TQ1IxIGNvcmU8L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2Ny0xNDgiIHY6bUlEPSI2NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTMwMC4zNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuNjc8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2OC0xNTAiIHY6bUlEPSI2OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NC4xMjUsLTMwMS45NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi42ODwvdGl0bGU+DQorCQkJPGRlc2M+SW50ZXJydXB0IENvbnRyb2xsZXI8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjIzLjUiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5JbnRlcnJ1cHQgPHY6bGYvPjx0c3Bhbg0KKwkJCQkJCXg9IjIxLjY1IiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Db250cm9sbGVyPC90c3Bhbj48L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU2OS0xNTQiIHY6bUlEPSI2OSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTcuODc1LC0zMDAuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjY5PC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNzAtMTU2IiB2Om1JRD0iNzAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyLjM1LC0zMDIuOTI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjcwPC90aXRsZT4NCisJCQk8ZGVzYz5TeXN0ZW0gQ29udHJvbCBVbml0PC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIyNi45OSIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPlN5c3RlbSA8djpsZi8+PHRzcGFuDQorCQkJCQkJeD0iMTcuNTkiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkNvbnRyb2wgVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNzEtMTYwIiB2Om1JRD0iNzEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI1LjM3NSwtMzAwLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi43MTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTcyLTE2MiIgdjptSUQ9IjcyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNC4zNSwtMzAyLjkyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi43MjwvdGl0bGU+DQorCQkJPGRlc2M+RGVidWcgTW9kdWxlPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMzYuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNzIuMDYiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjcyLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIyMy45NiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkRlYnVnIDx2OmxmLz48dHNwYW4NCisJCQkJCQl4PSIyMS40NyIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+TW9kdWxlPC90c3Bhbj48L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU3My0xNjYiIHY6bUlEPSI3MyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0zMDAuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjczPC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNzQtMTY4IiB2Om1JRD0iNzQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY3LjM1LC0zMDIuOTI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjc0PC90aXRsZT4NCisJCQk8ZGVzYz5UQVAgQ29udHJvbGxlcjwvZGVzYz4NCisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQorCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQorCQkJPHRleHQgeD0iMzMuMTgiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5UQVA8djpsZi8+PHRzcGFuDQorCQkJCQkJeD0iMjEuNjUiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkNvbnRyb2xsZXI8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTc1LTE3MiIgdjptSUQ9Ijc1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMjYyLjg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi43NTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTc2LTE3NCIgdjptSUQ9Ijc2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY0Ljg1LC0yNjUuNDI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjc2PC90aXRsZT4NCisJCQk8ZGVzYz5Db250cm9sLVN0YXR1cyBSZWdpc3RlciBGaWxlPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIxMy41NyIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkNvbnRyb2wtU3RhdHVzIDx2OmxmLz48dHNwYW4NCisJCQkJCQl4PSIxNy43MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+UmVnaXN0ZXIgRmlsZTwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlNzctMTc4IiB2Om1JRD0iNzciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkxLjYyNSwtMTQyLjEyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi43NzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTc4LTE4MCIgdjptSUQ9Ijc4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MiwtMTQ0KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjc4PC90aXRsZT4NCisJCQk8ZGVzYz5UaWdodGx5LUNvdXBsZWQgTWVtb3J5PC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDUiIGN5PSIzNjIuODUiIHdpZHRoPSI5MCIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iOTAiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjEyLjI1IiB5PSIzNTkuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+VGlnaHRseS1Db3VwbGVkIDx0c3Bhbg0KKwkJCQkJCXg9IjI3LjIxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5NZW1vcnk8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTc5LTE4NCIgdjptSUQ9Ijc5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxNC4xMjUsLTkzLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi43OTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTgwLTE4NiIgdjptSUQ9IjgwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwNi42LC05NS45MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuODA8L3RpdGxlPg0KKwkJCTxkZXNjPlRpbWVyPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMjIuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNDUuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjQ1LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIxMC40NiIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPlRpbWVyPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlODEtMTg5IiB2Om1JRD0iODEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Ljg3NSwtMjI1LjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi44MTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTgyLTE5MSIgdjptSUQ9IjgyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi4zNSwtMjI3LjkyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi44MjwvdGl0bGU+DQorCQkJPGRlc2M+SW5zdHJ1Y3Rpb24gRGVjb2RlIFVuaXQ8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjIwLjE2IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SW5zdHJ1Y3Rpb24gPHY6bGYvPjx0c3Bhbg0KKwkJCQkJCXg9IjE3LjQxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5EZWNvZGUgVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlODMtMTk1IiB2Om1JRD0iODMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI1LjM3NSwtMjI1LjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi44MzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTg0LTE5NyIgdjptSUQ9Ijg0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5OS44NSwtMjI3LjkyNSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi44NDwvdGl0bGU+DQorCQkJPGRlc2M+RXhlY3V0aW9uIFVuaXQ8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjIyLjIiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5FeGVjdXRpb24gPHY6bGYvPjx0c3Bhbg0KKwkJCQkJCXg9IjMyLjUxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Vbml0PC90c3Bhbj48L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU4NS0yMDEiIHY6bUlEPSI4NSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0yMjUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjg1PC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlODYtMjAzIiB2Om1JRD0iODYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY3LjM1LC0yMjcuOTI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjg2PC90aXRsZT4NCisJCQk8ZGVzYz5Mb2FkLVN0b3JlIFVuaXQ8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjIwLjIyIiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+TG9hZC1TdG9yZSA8djpsZi8+PHRzcGFuDQorCQkJCQkJeD0iMzIuNTEiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPlVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTg3LTIwNyIgdjptSUQ9Ijg3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4zNzUsLTI2Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuODc8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU4OC0yMDkiIHY6bUlEPSI4OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTkuODUsLTI2NS40MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuODg8L3RpdGxlPg0KKwkJCTxkZXNjPlRyaWdnZXIgRGVidWcgVW5pdDwvZGVzYz4NCisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQorCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQorCQkJPHRleHQgeD0iMjcuNDYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5UcmlnZ2VyIDx2OmxmLz48dHNwYW4NCisJCQkJCQl4PSIxOS40MiIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+RGVidWcgVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlODktMjEzIiB2Om1JRD0iODkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC02Ny44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuODk8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlOTAtMjE1IiB2Om1JRD0iOTAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODcuMzUsLTY2LjY3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi45MDwvdGl0bGU+DQorCQkJPGRlc2M+SU1FTTwvZGVzYz4NCisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQorCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQorCQkJPHRleHQgeD0iNS41MSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPklNRU08L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU5MS0yMTgiIHY6bUlEPSI5MSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTU4Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi45MTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU5Mi0yMjAiIHY6bUlEPSI5MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3My44NSwtNTcuNjc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjkyPC90aXRsZT4NCisJCQk8ZGVzYz5BSEIvQVhJPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMzEuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjYzLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIxMy4yNyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkFIQi9BWEk8L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU5My0yMjMiIHY6bUlEPSI5MyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTQ5Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi45MzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU5NC0yMjUiIHY6bUlEPSI5NCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC4zNSwtNDguNjc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjk0PC90aXRsZT4NCisJCQk8ZGVzYz5icmlkZ2U8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjEzLjc3IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+YnJpZGdlPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlOTUtMjI4IiB2Om1JRD0iOTUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtNjcuODc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjk1PC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTk2LTIzMCIgdjptSUQ9Ijk2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4OS44NSwtNjYuNjc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjk2PC90aXRsZT4NCisJCQk8ZGVzYz5ETUVNPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMTguMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIzLjY5IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+RE1FTTwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTk3LTIzMyIgdjptSUQ9Ijk3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTU4Ljg3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi45NzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGU5OC0yMzUiIHY6bUlEPSI5OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYuMzUsLTU3LjY3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi45ODwvdGl0bGU+DQorCQkJPGRlc2M+QUhCL0FYSTwvZGVzYz4NCisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+DQorCQkJPHY6dGV4dFJlY3QgY3g9IjMxLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjYzLjA1IiBoZWlnaHQ9IjEwLjgiLz4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+DQorCQkJPHRleHQgeD0iMTMuMjciIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5BSEIvQVhJPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlOTktMjM4IiB2Om1JRD0iOTkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtNDkuODc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjk5PC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEwMC0yNDAiIHY6bUlEPSIxMDAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwLjg1LC00OC42NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTAwPC90aXRsZT4NCisJCQk8ZGVzYz5icmlkZ2U8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjEzLjc3IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+YnJpZGdlPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTAxLTI0MyIgdjptSUQ9IjEwMSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTE4MC4zNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTAxPC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEwMi0yNDUiIHY6bUlEPSIxMDIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODcuMzUsLTE3OS4xNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTAyPC90aXRsZT4NCisJCQk8ZGVzYz5JTUVNPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMTguMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSI1LjUxIiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SU1FTTwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEwMy0yNDgiIHY6bUlEPSIxMDMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC0xNzEuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjEwMzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+DQorCQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUxMDQtMjUwIiB2Om1JRD0iMTA0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc4LjM1LC0xNzAuMTc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjEwNDwvdGl0bGU+DQorCQkJPGRlc2M+cm91dGVyPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMjcuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjU0LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIxMy44NSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPnJvdXRlcjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEwNS0yNTMiIHY6bUlEPSIxMDUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtMTgwLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMDU8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTA2LTI1NSIgdjptSUQ9IjEwNiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODkuODUsLTE3OS4xNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTA2PC90aXRsZT4NCisJCQk8ZGVzYz5ETUVNPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iMTguMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIzLjY5IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+RE1FTTwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTEwNy0yNTgiIHY6bUlEPSIxMDciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtMTcxLjM3NSkiPg0KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMDc8L3RpdGxlPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTA4LTI2MCIgdjptSUQ9IjEwOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAuODUsLTE3MC4xNzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTA4PC90aXRsZT4NCisJCQk8ZGVzYz5yb3V0ZXI8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjEzLjg1IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+cm91dGVyPC90ZXh0PgkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTA5LTI2MyIgdjptSUQ9IjEwOSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTcuODc1LC0yNjIuODc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjEwOTwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTExMC0yNjUiIHY6bUlEPSIxMTAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyLjM1LC0yNjUuNDI1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjExMDwvdGl0bGU+DQorCQkJPGRlc2M+TXVsdGktUG9ydCBSZWdpc3RlciBGaWxlPC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIyMS4wNiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPk11bHRpLVBvcnQgPHY6bGYvPjx0c3Bhbg0KKwkJCQkJCXg9IjE3LjcxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5SZWdpc3RlciBGaWxlPC90c3Bhbj48L3RleHQ+CQk8L2c+DQorCQk8ZyBpZD0ic2hhcGUxMTEtMjY5IiB2Om1JRD0iMTExIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTI2Mi44NzUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTExPC90aXRsZT4NCisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPg0KKwkJPC9nPg0KKwkJPGcgaWQ9InNoYXBlMTEyLTI3MSIgdjptSUQ9IjExMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjcuMzUsLTI2NS40MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTEyPC90aXRsZT4NCisJCQk8ZGVzYz5IYXJ0IERlYnVnIFVuaXQ8L2Rlc2M+DQorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPg0KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPg0KKwkJCTx0ZXh0IHg9IjMyLjMxIiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SGFydCA8djpsZi8+PHRzcGFuDQorCQkJCQkJeD0iMTkuNDIiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkRlYnVnIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCisJCTxnIGlkPSJzaGFwZTExMy0yNzUiIHY6bUlEPSIxMTMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC0yMjUuMzc1KSI+DQorCQkJPHRpdGxlPtCb0LjRgdGCLjExMzwvdGl0bGU+DQorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4NCisJCTwvZz4NCisJCTxnIGlkPSJzaGFwZTExNC0yNzciIHY6bUlEPSIxMTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjQuODUsLTIyNy45MjUpIj4NCisJCQk8dGl0bGU+0JvQuNGB0YIuMTE0PC90aXRsZT4NCisJCQk8ZGVzYz5JbnN0cnVjdGlvbiBGZXRjaCBVbml0PC9kZXNjPg0KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4NCisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIvPg0KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4NCisJCQk8dGV4dCB4PSIyMC4xNiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkluc3RydWN0aW9uPHY6bmV3bGluZUNoYXIvPjx0c3Bhbg0KKwkJCQkJCXg9IjIxLjMiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkZldGNoIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4NCisJPC9nPg0KKzwvc3ZnPg0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL2RvY3Mvc2NyMV9lYXMucGRmIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvZG9jcy9zY3IxX2Vhcy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzNmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL2RvY3Mvc2NyMV9lYXMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL2RvY3Mvc2NyMV91bS5wZGYgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9kb2NzL3NjcjFfdW0ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTY5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9kb2NzL3NjcjFfdW0ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9haGJfdG9wLmZpbGVzIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2FoYl90b3AuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzODM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9haGJfdG9wLmZpbGVzCkBAIC0wLDAgKzEsOCBAQAordG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YKK3RvcC9zY3IxX2ltZW1fcm91dGVyLnN2Cit0b3Avc2NyMV9kcF9tZW1vcnkuc3YKK3RvcC9zY3IxX3RjbS5zdgordG9wL3NjcjFfdGltZXIuc3YKK3RvcC9zY3IxX2RtZW1fYWhiLnN2Cit0b3Avc2NyMV9pbWVtX2FoYi5zdgordG9wL3NjcjFfdG9wX2FoYi5zdgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2F4aV90Yi5maWxlcyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9heGlfdGIuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzZGM5YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9heGlfdGIuZmlsZXMKQEAgLTAsMCArMSwzIEBACitjb3JlL3BpcGVsaW5lL3NjcjFfdHJhY2Vsb2cuc3YKK3RiL3NjcjFfbWVtb3J5X3RiX2F4aS5zdgordGIvc2NyMV90b3BfdGJfYXhpLnN2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2F4aV90b3AuZmlsZXMgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvYXhpX3RvcC5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY0YjhlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2F4aV90b3AuZmlsZXMKQEAgLTAsMCArMSw3IEBACit0b3Avc2NyMV9kbWVtX3JvdXRlci5zdgordG9wL3NjcjFfaW1lbV9yb3V0ZXIuc3YKK3RvcC9zY3IxX2RwX21lbW9yeS5zdgordG9wL3NjcjFfdGNtLnN2Cit0b3Avc2NyMV90aW1lci5zdgordG9wL3NjcjFfbWVtX2F4aS5zdgordG9wL3NjcjFfdG9wX2F4aS5zdgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlLmZpbGVzIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZGU0NQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlLmZpbGVzCkBAIC0wLDAgKzEsMjEgQEAKK2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2hkdS5zdgorY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2Citjb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdgorY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2Citjb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YKK2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YKK2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lkdS5zdgorY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2Citjb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9sc3Uuc3YKK2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX21wcmYuc3YKK2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RvcC5zdgorY29yZS9wcmltaXRpdmVzL3NjcjFfcmVzZXRfY2VsbHMuc3YKK2NvcmUvcHJpbWl0aXZlcy9zY3IxX2NnLnN2Citjb3JlL3NjcjFfY2xrX2N0cmwuc3YKK2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdgorY29yZS9zY3IxX3RhcGMuc3YKK2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdgorY29yZS9zY3IxX2NvcmVfdG9wLnN2Citjb3JlL3NjcjFfZG0uc3YKK2NvcmUvc2NyMV9kbWkuc3YKK2NvcmUvc2NyMV9zY3Uuc3YKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfaXBpYy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJkYzRjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9pcGljLnN2CkBAIC0wLDAgKzEsNjA1IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2lwaWMuc3Y+CisvLy8gQGJyaWVmICAgICAgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKElQSUMpCisvLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIEZ1bmN0aW9uYWxpdHk6CisgLy8gLSBTeW5jaHJvbml6ZXMgSVJRIGxpbmVzIChvcHRpb25hbCkKKyAvLyAtIERldGVjdHMgbGV2ZWwgYW5kIGVkZ2UgKHdpdGggb3B0aW9uYWwgbGluZXMgaW52ZXJzaW9uKSBvZiBJUlEgbGluZXMKKyAvLyAtIFNldHVwcyBpbnRlcnJ1cHRzIGhhbmRsaW5nIChtb2RlLCBpbnZlcnNpb24sIGVuYWJsZSkKKyAvLyAtIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgaW50ZXJydXB0cyBjdXJyZW50bHkgaW4KKyAvLyAgIHNlcnZpY2UKKyAvLyAtIEdlbmVyYXRlcyBpbnRlcnJ1cHQgcmVxdWVzdCB0byBDU1IKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIElSUSBsaW5lcyBoYW5kbGluZyAoc3luY2hyb25pemF0aW9uLCBsZXZlbCBhbmQgZWRnZSBkZXRlY3Rpb24pIGxvZ2ljCisgLy8gLSBJUElDIHJlZ2lzdGVyczoKKyAvLyAgIC0gQ0lTVgorIC8vICAgLSBDSUNTUgorIC8vICAgLSBFT0kKKyAvLyAgIC0gU09JCisgLy8gICAtIElEWAorIC8vICAgLSBJUFIKKyAvLyAgIC0gSVNWUgorIC8vICAgLSBJRVIKKyAvLyAgIC0gSU1SCisgLy8gICAtIElJTlZSCisgLy8gICAtIElDU1IKKyAvLyAtIFByaW9yaXR5IGludGVycnVwdCBnZW5lcmF0aW9uIGxvZ2ljCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9JUElDX0VOCisKK2BpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgorCittb2R1bGUgc2NyMV9pcGljCisoCisgICAgLy8gQ29tbW9uCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgLy8gSVBJQyByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgIC8vIElQSUMgY2xvY2sKKworICAgIC8vIEV4dGVybmFsIEludGVycnVwdCBsaW5lcworICAgIGlucHV0ICAgbG9naWMgW1NDUjFfSVJRX0xJTkVTX05VTS0xOjBdICAgICAgICAgIHNvYzJpcGljX2lycV9saW5lc19pLCAgIC8vIEV4dGVybmFsIElSUSBsaW5lcworCisgICAgLy8gQ1NSIDwtPiBJUElDIGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3JfcmVxX2ksICAgICAgIC8vIElQSUMgcmVhZCByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfd19yZXFfaSwgICAgICAgLy8gSVBJQyB3cml0ZSByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfYWRkcl9pLCAgICAgICAgLy8gSVBJQyBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfd2RhdGFfaSwgICAgICAgLy8gSVBJQyB3cml0ZSBkYXRhCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbywgICAgICAgLy8gSVBJQyByZWFkIGRhdGEKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGljMmNzcl9pcnFfbV9yZXFfbyAgICAvLyBJUlEgcmVxdWVzdCBmcm9tIElQSUMKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZDsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4OworfSB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmQ7CisgICAgbG9naWMgICBbU0NSMV9JUlFfVkVDVF9XSURUSC0xOjBdICAgICAgIGlkeDsKK30gdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfczsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbTsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpczsKKyAgICBsb2dpYyAgIFtTQ1IxX0lSUV9MSU5FU19XSURUSC0xOjBdICAgICAgbGluZTsKK30gdHlwZV9zY3IxX2ljc3JfbV9zOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcDsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWU7Cit9IHR5cGVfc2NyMV9jaWNzcl9zOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGF1dG9tYXRpYyB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3Mgc2NyMV9zZWFyY2hfb25lXzIoCisgICAgaW5wdXQgICBsb2dpYyAgIFsxOjBdIGRpbgorKTsKKyAgICB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3MgdG1wOworYmVnaW4KKyAgICB0bXAudmQgID0gfGRpbjsKKyAgICB0bXAuaWR4ID0gfmRpblswXTsKKyAgICByZXR1cm4gIHRtcDsKK2VuZAorZW5kZnVuY3Rpb24gOiBzY3IxX3NlYXJjaF9vbmVfMgorCitmdW5jdGlvbiBhdXRvbWF0aWMgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyBzY3IxX3NlYXJjaF9vbmVfMTYoCisgICAgaW5wdXQgICBsb2dpYyBbMTU6MF0gICAgZGluCispOworYmVnaW4KKyAgICBsb2dpYyBbNzowXSAgICAgICAgIHN0YWdlMV92ZDsKKyAgICBsb2dpYyBbMzowXSAgICAgICAgIHN0YWdlMl92ZDsKKyAgICBsb2dpYyBbMTowXSAgICAgICAgIHN0YWdlM192ZDsKKworICAgIGxvZ2ljICAgICAgICAgICAgICAgc3RhZ2UxX2lkeCBbNzowXTsKKyAgICBsb2dpYyBbMTowXSAgICAgICAgIHN0YWdlMl9pZHggWzM6MF07CisgICAgbG9naWMgWzI6MF0gICAgICAgICBzdGFnZTNfaWR4IFsxOjBdOworICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzE2X3MgcmVzdWx0OworCisgICAgLy8gU3RhZ2UgMQorICAgIGZvciAoaW50IHVuc2lnbmVkIGk9MDsgaTw4OyArK2kpIGJlZ2luCisgICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7CisgICAgICAgIHRtcCA9IHNjcjFfc2VhcmNoX29uZV8yKGRpblsoaSsxKSoyLTEtOjJdKTsKKyAgICAgICAgc3RhZ2UxX3ZkW2ldICA9IHRtcC52ZDsKKyAgICAgICAgc3RhZ2UxX2lkeFtpXSA9IHRtcC5pZHg7CisgICAgZW5kCisKKyAgICAvLyBTdGFnZSAyCisgICAgZm9yIChpbnQgdW5zaWduZWQgaT0wOyBpPDQ7ICsraSkgYmVnaW4KKyAgICAgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKKyAgICAgICAgdG1wID0gc2NyMV9zZWFyY2hfb25lXzIoc3RhZ2UxX3ZkWyhpKzEpKjItMS06Ml0pOworICAgICAgICBzdGFnZTJfdmRbaV0gID0gdG1wLnZkOworICAgICAgICBzdGFnZTJfaWR4W2ldID0gKH50bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKKyAgICBlbmQKKworICAgIC8vIFN0YWdlIDMKKyAgICBmb3IgKGludCB1bnNpZ25lZCBpPTA7IGk8MjsgKytpKSBiZWdpbgorICAgICAgICB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3MgdG1wOworICAgICAgICB0bXAgPSBzY3IxX3NlYXJjaF9vbmVfMihzdGFnZTJfdmRbKGkrMSkqMi0xLToyXSk7CisgICAgICAgIHN0YWdlM192ZFtpXSAgPSB0bXAudmQ7CisgICAgICAgIHN0YWdlM19pZHhbaV0gPSAofnRtcC5pZHgpID8ge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippXX0gOiB7dG1wLmlkeCwgc3RhZ2UyX2lkeFsyKmkrMV19OworICAgIGVuZAorCisgICAgLy8gU3RhZ2UgNAorICAgIHJlc3VsdC52ZCA9IHxzdGFnZTNfdmQ7CisgICAgcmVzdWx0LmlkeCA9IChzdGFnZTNfdmRbMF0pID8gezEnYjAsIHN0YWdlM19pZHhbMF19IDogezEnYjEsIHN0YWdlM19pZHhbMV19OworCisgICAgcmV0dXJuIHJlc3VsdDsKK2VuZAorZW5kZnVuY3Rpb24gOiBzY3IxX3NlYXJjaF9vbmVfMTYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIElSUSBsaW5lcyBoYW5kbGluZyBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2xpbmVzOyAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgSVJRIGxpbmVzCitgaWZkZWYgU0NSMV9JUElDX1NZTkNfRU4KK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbGluZXNfc3luYzsKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfU1lOQ19FTgorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlycV9saW5lc19kbHk7ICAgICAgICAgIC8vIEludGVybmFsIElSUSBsaW5lcyBkZWxheWVkIGZvciAxIGN5Y2xlCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX2VkZ2VfZGV0ZWN0ZWQ7ICAgICAgLy8gSVJRIGxpbmVzIGVkZ2UgZGV0ZWN0ZWQgZmxhZ3MKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcnFfbHZsOyAgICAgICAgICAgICAgICAvLyBJUlEgbGluZXMgbGV2ZWwKKworLy8gSVBJQyByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENJU1YgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGljX2Npc3ZfdXBkOyAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWNvdHIgaW4gU2VydmljZSByZWdpc3RlciB1cGRhdGUKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcGljX2Npc3ZfZmY7ICAgICAgICAgICAvLyBDdXJyZW50IEludGVycnVwdCBWZWN0b3IgaW4gU2VydmljZSByZWdpc3RlcgorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlwaWNfY2lzdl9uZXh0OyAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IFZlY3RvciBpbiBTZXJ2aWNlIHJlZ2lzdGVyIG5leHQgdmFsdWUKKworLy8gQ0lDUyByZWdpc3RlciAoQ0lDU1IpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxOyAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyByZWdpc3RlcgordHlwZV9zY3IxX2NpY3NyX3MgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfY2ljc3I7ICAgICAgICAgICAgIC8vIEN1cnJlbnQgSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCisKKy8vIEVPSSByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvaV93cl9yZXE7ICAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gRW5kIG9mIEludGVycnVwdCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfZW9pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gZW5kIHRoZSBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQorCisvLyBTT0kgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2lfd3JfcmVxOyAgICAgICAgICAgICAvLyBXcml0ZSByZXF1ZXN0IHRvIFN0YXJ0IG9mIEludGVycnVwdCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaWNfc29pX3JlcTsgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gc3RhcnQgdGhlIGludGVycnVwdAorCisvLyBJRFggcmVnaXN0ZXIgKElEWFIpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4cl93cl9yZXE7ICAgICAgICAgICAgLy8gV3JpdGUgcmVxdWVzdCB0byBJbmRleCByZWdpc3RlcgorbG9naWMgW1NDUjFfSVJRX0lEWF9XSURUSC0xOjBdICAgICAgICAgIGlwaWNfaWR4cl9mZjsgICAgICAgICAgIC8vIEluZGV4IHJlZ2lzdGVyCisKKy8vIElQIHJlZ2lzdGVyIChJUFIpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pcHJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIgdXBkYXRlCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lwcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgcGVuZGluZyByZWdpc3RlciBuZXh0IHZhbHVlCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX2NvbmQ7ICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgY29uZGl0aW9uCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pcHJfY2xyX3JlcTsgICAgICAgLy8gSW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgcmVxdWVzdAorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXByX2NscjsgICAgICAgICAgIC8vIEludGVycnVwdCBwZW5kaW5nIGNsZWFyIG9wZXJhdGlvbgorCisvLyBJU1YgcmVnaXN0ZXIgKElTVlIpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pc3ZyX3VwZDsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHVwZGF0ZQorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9mZjsgICAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlcgorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaXN2cl9uZXh0OyAgICAgICAgIC8vIEludGVycnVwdCBTZXJ2aWNlZCByZWdpc3RlciBuZXh0IHZhbHVlCisKKy8vIElFIHJlZ2lzdGVyIChJRVIpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBpY19pZXJfdXBkOyAgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciB1cGRhdGUKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2llcl9mZjsgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pZXJfbmV4dDsgICAgICAgICAgLy8gSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBuZXh0IHZhbHVlCisKKy8vIElNIHJlZ2lzdGVyIChJTVIpCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pbXJfZmY7ICAgICAgICAgICAgLy8gSW50ZXJydXB0IG1vZGUgcmVnaXN0ZXIKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2ltcl9uZXh0OyAgICAgICAgICAvLyBJbnRlcnJ1cHQgbW9kZSByZWdpc3RlciBuZXh0IHZhbHVlCisKKy8vIElJTlYgcmVnaXN0ZXIgKElJTlZSKQorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfTlVNLTE6MF0gICAgICAgICAgIGlwaWNfaWludnJfZmY7ICAgICAgICAgIC8vIEludGVycnVwdCBJbnZlcnNpb24gcmVnaXN0ZXIKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX05VTS0xOjBdICAgICAgICAgICBpcGljX2lpbnZyX25leHQ7ICAgICAgICAvLyBJbnRlcnJ1cHQgSW52ZXJzaW9uIHJlZ2lzdGVyIG5leHQgdmFsdWUKKworLy8gSUNTIHJlZ2lzdGVyIChJQ1NSKQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc3Jfd3JfcmVxOyAgICAgICAgICAgIC8vIFdyaXRlIHJlcXVlc3QgdG8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCit0eXBlX3NjcjFfaWNzcl9tX3MgICAgICAgICAgICAgICAgICAgICAgaXBpY19pY3NyOyAgICAgICAgICAgICAgLy8gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyCisKKy8vIFByaW9yaXR5IGludGVycnVwdCBnZW5lcmF0aW9uIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFNlcnZpY2VkIGludGVycnVwdCBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3NlcnZfdmQ7ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gaW50ZXJydXB0IGluIHNlcnZpY2UKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfc2Vydl9pZHg7ICAgICAgICAgICAvLyBJbmRleCBvZiBhbiBpbnRlcnJ1cHQgdGhhdCBpcyBjdXJyZW50bHkgaW4gc2VydmljZQorCisvLyBSZXF1ZXN0ZWQgaW50ZXJydXB0IHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfcmVxX3ZkOyAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKK2xvZ2ljIFtTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gICAgICAgICBpcnFfcmVxX2lkeDsgICAgICAgICAgICAvLyBJbmRleCBvZiBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQKKworLy8gSW50ZXJydXB0IHJlcXVlc3RlZCBvbiAiZW5kIG9mIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQiIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZW9pX3JlcV92ZDsgICAgICAgICAvLyBUaGVyZSBpcyBhIHJlcXVlc3RlZCBpbnRlcnJ1cHQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAorbG9naWMgW1NDUjFfSVJRX1ZFQ1RfV0lEVEgtMTowXSAgICAgICAgIGlycV9lb2lfcmVxX2lkeDsgICAgICAgIC8vIEluZGV4IG9mIGFuIGludGVycnVwdCByZXF1ZXN0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb25lIGhhcyBlbmRlZAorCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXJxX3JlcV92OyAgICAgICAgICAgICAgLy8gVmVjdG9yIG9mIGludGVycnVwdHMgdGhhdCBhcmUgcGVuZGluZyBhbmQgZW5hYmxlZAorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3N0YXJ0X3ZkOyAgICAgICAgICAgLy8gUmVxdWVzdCB0byBzdGFydCBhbiBpbnRlcnJ1cHQgaXMgdmFsaWQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfaGlfcHJpb3JfcG5kOyAgICAgICAvLyBUaGVyZSBpcyBhIHBlbmRpbmcgSVJRIHdpdGggYSBwcmlvcml0eSBoaWdoZXIgdGhhbiBvZiB0aGUgaW50ZXJydXB0IHRoYXQgaXMgY3VycmVudGx5IGluIHNlcnZpY2UKKwordHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlycl9wcmlvcml0eTsgICAgICAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgcmVxdWVzdGVkIGludGVycnVwdAordHlwZV9zY3IxX3NlYXJjaF9vbmVfMTZfcyAgICAgICAgICAgICAgIGlzdnJfcHJpb3JpdHlfZW9pOyAgICAgIC8vIFN0cnVjdHVyZSBmb3IgdmQgYW5kIGlkeCBvZiB0aGUgaW50ZXJydXB0IHJlcXVlc3RlZCB3aGVuIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgaGFzIGVuZGVkCitsb2dpYyBbU0NSMV9JUlFfVkVDVF9OVU0tMTowXSAgICAgICAgICAgaXBpY19pc3ZyX2VvaTsgICAgICAgICAgLy8gSW50ZXJydXB0IFNlcnZpY2VkIHJlZ2lzdGVyIHdoZW4gdGhlIHByZXZpb3VzIGludGVycnVwdCBoYXMgZW5kZWQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElSUSBsaW5lcyBoYW5kbGluZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmIFNDUjFfSVBJQ19TWU5DX0VOCisvLyBJUlEgbGluZXMgc3luY2hyb25pemF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpcnFfbGluZXNfc3luYyA8PSAnMDsKKyAgICAgICAgaXJxX2xpbmVzICAgICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaXJxX2xpbmVzX3N5bmMgPD0gc29jMmlwaWNfaXJxX2xpbmVzX2k7CisgICAgICAgIGlycV9saW5lcyAgICAgIDw9IGlycV9saW5lc19zeW5jOworICAgIGVuZAorZW5kCitgZWxzZSAvLyBTQ1IxX0lQSUNfU1lOQ19FTgorYXNzaWduIGlycV9saW5lcyA9IHNvYzJpcGljX2lycV9saW5lc19pOworYGVuZGlmIC8vIFNDUjFfSVBJQ19TWU5DX0VOCisKKy8vIElSUSBsaW5lcyBsZXZlbCBkZXRlY3Rpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBpcnFfbHZsID0gaXJxX2xpbmVzIF4gaXBpY19paW52cl9uZXh0OworCisvLyBJUlEgbGluZXMgZWRnZSBkZXRlY3Rpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGlycV9saW5lc19kbHkgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaXJxX2xpbmVzX2RseSA8PSBpcnFfbGluZXM7CisgICAgZW5kCitlbmQKKworYXNzaWduIGlycV9lZGdlX2RldGVjdGVkID0gKGlycV9saW5lc19kbHkgXiBpcnFfbGluZXMpICYgaXJxX2x2bDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElQSUMgcmVnaXN0ZXJzIHJlYWQvd3JpdGUgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkIExvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaXBpYzJjc3JfcmRhdGFfbyAgPSAnMDsKKworICAgIGlmIChjc3IyaXBpY19yX3JlcV9pKSBiZWdpbgorICAgICAgICBjYXNlIChjc3IyaXBpY19hZGRyX2kpCisgICAgICAgICAgICBTQ1IxX0lQSUNfQ0lTViA6IGJlZ2luCisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lSUV9WRUNUX1dJRFRILTE6MF0gPSBpcnFfc2Vydl92ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXBpY19jaXN2X2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0lQSUNfQ0lDU1IgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICA9IGlwaWNfY2ljc3IuaXA7CisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gID0gaXBpY19jaWNzci5pZTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9JUElDX0lQUiA6IGJlZ2luCisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9IGBTQ1IxX1hMRU4nKGlwaWNfaXByX2ZmKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9JUElDX0lTVlIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSBgU0NSMV9YTEVOJyhpcGljX2lzdnJfZmYpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0lQSUNfRU9JLAorICAgICAgICAgICAgU0NSMV9JUElDX1NPSSA6IGJlZ2luCisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfbyA9ICcwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0lQSUNfSURYIDogYmVnaW4KKyAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vID0gYFNDUjFfWExFTicoaXBpY19pZHhyX2ZmKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVBdICAgICAgPSBpcGljX2ljc3IuaXA7CisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9JRV0gICAgICA9IGlwaWNfaWNzci5pZTsKKyAgICAgICAgICAgICAgICBpcGljMmNzcl9yZGF0YV9vW1NDUjFfSVBJQ19JQ1NSX0lNXSAgICAgID0gaXBpY19pY3NyLmltOworICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSU5WXSAgICAgPSBpcGljX2ljc3IuaW52OworICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfUFJWX01TQjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0JdID0gU0NSMV9JUElDX1BSVl9NOworICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX29bU0NSMV9JUElDX0lDU1JfSVNdICAgICAgPSBpcGljX2ljc3IuaXM7CisgICAgICAgICAgICAgICAgaXBpYzJjc3JfcmRhdGFfb1tTQ1IxX0lQSUNfSUNTUl9MTl9NU0ItMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0xOX0xTQl0gID0gaXBpY19pY3NyLmxpbmU7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX28gPSAneDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworLy8gV3JpdGUgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFJlZ2lzdGVyIHNlbGVjdGlvbgorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjaWNzcl93cl9yZXEgPSAxJ2IwOworICAgIGVvaV93cl9yZXEgICA9IDEnYjA7CisgICAgc29pX3dyX3JlcSAgID0gMSdiMDsKKyAgICBpZHhyX3dyX3JlcSAgPSAxJ2IwOworICAgIGljc3Jfd3JfcmVxICA9IDEnYjA7CisgICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCisgICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKKyAgICAgICAgICAgIFNDUjFfSVBJQ19DSVNWIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQorICAgICAgICAgICAgU0NSMV9JUElDX0NJQ1NSOiBjaWNzcl93cl9yZXEgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgOiBiZWdpbiBlbmQKKyAgICAgICAgICAgIFNDUjFfSVBJQ19JU1ZSIDogYmVnaW4gZW5kIC8vIFF1aWV0IFJlYWQtT25seQorICAgICAgICAgICAgU0NSMV9JUElDX0VPSSAgOiBlb2lfd3JfcmVxICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgOiBzb2lfd3JfcmVxICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9JUElDX0lEWCAgOiBpZHhyX3dyX3JlcSAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgOiBpY3NyX3dyX3JlcSAgPSAxJ2IxOworICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luIC8vIElsbGVnYWwgSVBJQyByZWdpc3RlciBhZGRyZXNzCisgICAgICAgICAgICAgICAgY2ljc3Jfd3JfcmVxID0gJ3g7CisgICAgICAgICAgICAgICAgZW9pX3dyX3JlcSAgID0gJ3g7CisgICAgICAgICAgICAgICAgc29pX3dyX3JlcSAgID0gJ3g7CisgICAgICAgICAgICAgICAgaWR4cl93cl9yZXEgID0gJ3g7CisgICAgICAgICAgICAgICAgaWNzcl93cl9yZXEgID0gJ3g7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJUElDIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gUmVnaXN0ZXJzOgorIC8vIC0gQ3VycmVudCBJbnRlcnJ1cHQgVmVjdG9yIGluIFNlcnZpY2UgKENJU1YpIHJlZ2lzdGVyCisgLy8gLSBDdXJyZW50IEludGVycnVwdCBDb250cm9sIFN0YXR1cyAoQ0lDU1IpIHJlZ2lzdGVyCisgLy8gLSBFbmQgb2YgSW50ZXJydXB0IChFT0kpIHJlZ2lzdGVyCisgLy8gLSBTdGFydCBvZiBJbnRlcnJ1cHQgKFNPSSkgcmVnaXN0ZXIKKyAvLyAtIEluZGV4IChJRFgpIHJlZ2lzdGVyCisgLy8gLSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAoSVBSKQorIC8vIC0gSW50ZXJydXB0IFNlcnZpY2VkIFJlZ2lzdGVyIChJU1ZSKQorIC8vIC0gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoSUVSKQorIC8vIC0gSW50ZXJydXB0IE1vZGUgUmVnaXN0ZXIgKElNUikKKyAvLyAtIEludGVycnVwdCBJbnZlcnNpb24gUmVnaXN0ZXIgKElJTlZSKQorIC8vIC0gSW50ZXJydXB0IENvbnRyb2wgU3RhdHVzIFJlZ2lzdGVyIChJQ1NSKQorLy8KKworLy8gQ0lTViByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRhaW5zIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciBjdXJyZW50bHkgaW4gc2VydmljZS4gV2hlbiBubworLy8gaW50ZXJydXB0cyBhcmUgaW4gc2VydmljZSwgY29udGFpbnMgbnVtYmVyIG9mIHRoZSB2b2lkIGludGVycnVwdCB2ZWN0b3IgKDB4MTApLgorLy8gVGhlIHJlZ2lzdGVyIGNhbm5vdCBjb250YWluIGFsbCAwJ3MKKworYXNzaWduIGlwaWNfY2lzdl91cGQgPSBpcnFfc3RhcnRfdmQgfCBpcGljX2VvaV9yZXE7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGlwaWNfY2lzdl9mZiA8PSBTQ1IxX0lSUV9WT0lEX1ZFQ1RfTlVNOworICAgIGVuZCBlbHNlIGlmIChpcGljX2Npc3ZfdXBkKSBiZWdpbgorICAgICAgICBpcGljX2Npc3ZfZmYgPD0gaXBpY19jaXN2X25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIGlwaWNfY2lzdl9uZXh0ID0gaXJxX3N0YXJ0X3ZkID8gaXJxX3JlcV9pZHgKKyAgICAgICAgICAgICAgICAgICAgICA6IGlwaWNfZW9pX3JlcSA/IGlycV9lb2lfcmVxX3ZkID8gaXJxX2VvaV9yZXFfaWR4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7CisKK2Fzc2lnbiBpcnFfc2Vydl9pZHggPSBpcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0yOjBdOworYXNzaWduIGlycV9zZXJ2X3ZkICA9IH5pcGljX2Npc3ZfZmZbU0NSMV9JUlFfVkVDVF9XSURUSC0xXTsKKworLy8gQ0lDU1IgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaG93cyB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgY3VycmVudGx5IGluIHNlcnZpY2UgaXMgcGVuZGluZyBhbmQgZW5hYmxlZAorCithc3NpZ24gaXBpY19jaWNzci5pcCA9IGlwaWNfaXByX2ZmW2lycV9zZXJ2X2lkeF0gJiBpcnFfc2Vydl92ZDsKK2Fzc2lnbiBpcGljX2NpY3NyLmllID0gaXBpY19pZXJfZmZbaXJxX3NlcnZfaWR4XSAmIGlycV9zZXJ2X3ZkOworCisvLyBFT0kgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXcml0aW5nIGFueSB2YWx1ZSB0byBFT0kgcmVnaXN0ZXIgZW5kcyB0aGUgaW50ZXJydXB0IHdoaWNoIGlzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCisKK2Fzc2lnbiBpcGljX2VvaV9yZXEgPSBlb2lfd3JfcmVxICYgaXJxX3NlcnZfdmQ7CisKKy8vIFNPSSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdyaXRpbmcgYW55IHZhbHVlIHRvIFNPSSBhY3RpdmF0ZXMgc3RhcnQgb2YgaW50ZXJydXB0IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLyBjb25kaXRpb25zIGlzIHRydWU6CisvLyAtIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZW5kaW5nIGludGVycnVwdCB3aXRoIElFIGFuZCBJU1IgaXMgemVybworLy8gLSBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVuZGluZyBpbnRlcnJ1cHQgd2l0aCBJRSBhbmQgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlCisvLyBpbnRlcnJ1cHRzIGN1cnJlbnRseSBpbiBzZXJ2aWNlCisKK2Fzc2lnbiBpcGljX3NvaV9yZXEgPSBzb2lfd3JfcmVxICYgaXJxX3JlcV92ZDsKKworLy8gSURYIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdCB2ZWN0b3Igd2hpY2ggaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgSVBJQ19JQ1NSCisvLyByZWdpc3RlcgorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpcGljX2lkeHJfZmYgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYgKGlkeHJfd3JfcmVxKSBiZWdpbgorICAgICAgICBpcGljX2lkeHJfZmYgPD0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lSUV9JRFhfV0lEVEgtMTowXTsKKyAgICBlbmQKK2VuZAorCisvLyBJUFIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3IgZXZlcnkgSVJRIGxpbmUgc2hvd3Mgd2hldGhlciB0aGVyZSBpcyBhIHBlbmRpbmcgaW50ZXJydXB0CisKK2Fzc2lnbiBpcGljX2lwcl91cGQgPSAoaXBpY19pcHJfbmV4dCAhPSBpcGljX2lwcl9mZik7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGlwaWNfaXByX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmIChpcGljX2lwcl91cGQpIGJlZ2luCisgICAgICAgIGlwaWNfaXByX2ZmIDw9IGlwaWNfaXByX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpcGljX2lwcl9jbHJfcmVxID0gJzA7CisgICAgaWYgKGNzcjJpcGljX3dfcmVxX2kpIGJlZ2luCisgICAgICAgIGNhc2UgKGNzcjJpcGljX2FkZHJfaSkKKyAgICAgICAgICAgIFNDUjFfSVBJQ19DSUNTUjogaXBpY19pcHJfY2xyX3JlcVtpcnFfc2Vydl9pZHhdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaXJxX3NlcnZfdmQ7CisgICAgICAgICAgICBTQ1IxX0lQSUNfSVBSICA6IGlwaWNfaXByX2Nscl9yZXEgICAgICAgICAgICAgICA9IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUlFfVkVDVF9OVU0tMTowXTsKKyAgICAgICAgICAgIFNDUjFfSVBJQ19TT0kgIDogaXBpY19pcHJfY2xyX3JlcVtpcnFfcmVxX2lkeF0gID0gaXJxX3JlcV92ZDsKKyAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSIDogaXBpY19pcHJfY2xyX3JlcVtpcGljX2lkeHJfZmZdID0gY3NyMmlwaWNfd2RhdGFfaVtTQ1IxX0lQSUNfSUNTUl9JUF07CisgICAgICAgICAgICBkZWZhdWx0ICAgICAgICA6IGJlZ2luIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYXNzaWduIGlwaWNfaXByX2Nscl9jb25kID0gfmlycV9sdmwgfCBpcGljX2ltcl9uZXh0OworYXNzaWduIGlwaWNfaXByX2NsciAgICAgID0gaXBpY19pcHJfY2xyX3JlcSAmIGlwaWNfaXByX2Nscl9jb25kOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGlwaWNfaXByX25leHQgPSAnMDsKKyAgICBmb3IgKGludCB1bnNpZ25lZCBpPTA7IGk8U0NSMV9JUlFfVkVDVF9OVU07ICsraSkgYmVnaW4KKyAgICAgICAgaXBpY19pcHJfbmV4dFtpXSA9IGlwaWNfaXByX2NscltpXSA/IDEnYjAKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IH5pcGljX2ltcl9mZltpXSA/IGlycV9sdmxbaV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlwaWNfaXByX2ZmW2ldIHwgaXJxX2VkZ2VfZGV0ZWN0ZWRbaV07CisgICAgZW5kCitlbmQKKworLy8gSVNWUgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZvciBldmVyeSBJUlEgbGluZSBzaG93cyB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgaXMgaW4gc2VydmljZSBvciBub3QKKworYXNzaWduIGlwaWNfaXN2cl91cGQgPSBpcnFfc3RhcnRfdmQgfCBpcGljX2VvaV9yZXE7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGlwaWNfaXN2cl9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoaXBpY19pc3ZyX3VwZCkgYmVnaW4KKyAgICAgICAgaXBpY19pc3ZyX2ZmIDw9IGlwaWNfaXN2cl9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaXBpY19pc3ZyX2VvaSA9IGlwaWNfaXN2cl9mZjsKKyAgICBpZiAoaXJxX3NlcnZfdmQpIGJlZ2luCisgICAgICAgIGlwaWNfaXN2cl9lb2lbaXJxX3NlcnZfaWR4XSA9IDEnYjA7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpcGljX2lzdnJfbmV4dCA9IGlwaWNfaXN2cl9mZjsKKyAgICBpZiAoaXJxX3N0YXJ0X3ZkKSBiZWdpbgorICAgICAgICBpcGljX2lzdnJfbmV4dFtpcnFfcmVxX2lkeF0gPSAxJ2IxOworICAgIGVuZCBlbHNlIGlmIChpcGljX2VvaV9yZXEpIGJlZ2luCisgICAgICAgIGlwaWNfaXN2cl9uZXh0ID0gaXBpY19pc3ZyX2VvaTsKKyAgICBlbmQKK2VuZAorCisvLyBJRVIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFbmFibGVzL2Rpc2FibGVzIGludGVycnVwdCBmb3IgZXZlcnkgSVJRIGxpbmUKKworYXNzaWduIGlwaWNfaWVyX3VwZCA9IGNpY3NyX3dyX3JlcSB8IGljc3Jfd3JfcmVxOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpcGljX2llcl9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoaXBpY19pZXJfdXBkKSBiZWdpbgorICAgICAgICBpcGljX2llcl9mZiA8PSBpcGljX2llcl9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaXBpY19pZXJfbmV4dCA9IGlwaWNfaWVyX2ZmOworICAgIGlmIChjaWNzcl93cl9yZXEpIGJlZ2luCisgICAgICAgIGlwaWNfaWVyX25leHRbaXJxX3NlcnZfaWR4XSA9IGlycV9zZXJ2X3ZkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcjJpcGljX3dkYXRhX2lbU0NSMV9JUElDX0lDU1JfSUVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlwaWNfaWVyX2ZmW2lycV9zZXJ2X2lkeF07CisgICAgZW5kIGVsc2UgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgorICAgICAgICBpcGljX2llcl9uZXh0W2lwaWNfaWR4cl9mZl0gPSBjc3IyaXBpY193ZGF0YV9pW1NDUjFfSVBJQ19JQ1NSX0lFXTsKKyAgICBlbmQKK2VuZAorCisvLyBJTVIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3IgZXZlcnkgSVJRIGxpbmUgc2V0cyBlaXRoZXIgTGV2ZWwgKDApIG9yIEVkZ2UgKDEpIGRldGVjdGlvbgorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpcGljX2ltcl9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoaWNzcl93cl9yZXEpIGJlZ2luCisgICAgICAgIGlwaWNfaW1yX2ZmIDw9IGlwaWNfaW1yX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpcGljX2ltcl9uZXh0ID0gaXBpY19pbXJfZmY7CisgICAgaWYgKGljc3Jfd3JfcmVxKSBiZWdpbgorICAgICAgICBpcGljX2ltcl9uZXh0W2lwaWNfaWR4cl9mZl0gPSBjc3IyaXBpY193ZGF0YV9pW1NDUjFfSVBJQ19JQ1NSX0lNXTsKKyAgICBlbmQKK2VuZAorCisvLyBJSU5WUgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZvciBldmVyeSBJUlEgbGluZSBkZWZpbmVzIHdoZXRoZXIgaXQgc2hvdWxkIGJlIGludmVydGVkIG9yIG5vdAorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpcGljX2lpbnZyX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmIChpY3NyX3dyX3JlcSkgYmVnaW4KKyAgICAgICAgaXBpY19paW52cl9mZiA8PSBpcGljX2lpbnZyX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpcGljX2lpbnZyX25leHQgPSBpcGljX2lpbnZyX2ZmOworICAgIGlmIChpY3NyX3dyX3JlcSkgYmVnaW4KKyAgICAgICAgaXBpY19paW52cl9uZXh0W2lwaWNfaWR4cl9mZl0gPSBjc3IyaXBpY193ZGF0YV9pW1NDUjFfSVBJQ19JQ1NSX0lOVl07CisgICAgZW5kCitlbmQKKworLy8gSUNTUgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvbGRzIGNvbnRyb2wgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkgSW5kZXggUmVnaXN0ZXIKKworYXNzaWduIGlwaWNfaWNzci5pcCAgICA9IGlwaWNfaXByX2ZmICBbaXBpY19pZHhyX2ZmXTsKK2Fzc2lnbiBpcGljX2ljc3IuaWUgICAgPSBpcGljX2llcl9mZiAgW2lwaWNfaWR4cl9mZl07Cithc3NpZ24gaXBpY19pY3NyLmltICAgID0gaXBpY19pbXJfZmYgIFtpcGljX2lkeHJfZmZdOworYXNzaWduIGlwaWNfaWNzci5pbnYgICA9IGlwaWNfaWludnJfZmZbaXBpY19pZHhyX2ZmXTsKK2Fzc2lnbiBpcGljX2ljc3IuaXMgICAgPSBpcGljX2lzdnJfZmYgW2lwaWNfaWR4cl9mZl07Cithc3NpZ24gaXBpY19pY3NyLmxpbmUgID0gU0NSMV9JUlFfTElORVNfV0lEVEgnKGlwaWNfaWR4cl9mZik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcmlvcml0eSBJUlEgZ2VuZXJhdGlvbiBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGlycV9yZXFfdiA9IGlwaWNfaXByX2ZmICYgaXBpY19pZXJfZmY7CisKK2Fzc2lnbiBpcnJfcHJpb3JpdHkgICAgICAgID0gc2NyMV9zZWFyY2hfb25lXzE2KGlycV9yZXFfdik7Cithc3NpZ24gaXJxX3JlcV92ZCAgICAgICAgICA9IGlycl9wcmlvcml0eS52ZDsKK2Fzc2lnbiBpcnFfcmVxX2lkeCAgICAgICAgID0gaXJyX3ByaW9yaXR5LmlkeDsKKworYXNzaWduIGlzdnJfcHJpb3JpdHlfZW9pICAgPSBzY3IxX3NlYXJjaF9vbmVfMTYoaXBpY19pc3ZyX2VvaSk7Cithc3NpZ24gaXJxX2VvaV9yZXFfdmQgICAgICA9IGlzdnJfcHJpb3JpdHlfZW9pLnZkOworYXNzaWduIGlycV9lb2lfcmVxX2lkeCAgICAgPSBpc3ZyX3ByaW9yaXR5X2VvaS5pZHg7CisKK2Fzc2lnbiBpcnFfaGlfcHJpb3JfcG5kICAgICA9IGlycV9yZXFfaWR4IDwgaXJxX3NlcnZfaWR4OworCithc3NpZ24gaXBpYzJjc3JfaXJxX21fcmVxX28gPSBpcnFfcmVxX3ZkICYgKH5pcnFfc2Vydl92ZCB8IGlycV9oaV9wcmlvcl9wbmQpOworCithc3NpZ24gaXJxX3N0YXJ0X3ZkICAgICAgICAgPSBpcGljMmNzcl9pcnFfbV9yZXFfbyAmIGlwaWNfc29pX3JlcTsKKworZW5kbW9kdWxlIDogc2NyMV9pcGljCisKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfY3NyLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Nzci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODM4ODdkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2Nzci5zdgpAQCAtMCwwICsxLDExNjcgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9jc3Iuc3Y+CisvLy8gQGJyaWVmICAgICAgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXJzIChDU1IpCisvLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIEZ1bmN0aW9uYWxpdHk6CisgLy8gLSBQcm92aWRlcyBhY2Nlc3MgdG8gUklTQy1WIENTUiBNYWNoaW5lIHJlZ2lzdGVycworIC8vIC0gSGFuZGxlcyBldmVudHMgKEVYQywgSVJRIGFuZCBNUkVUKToKKyAvLyAgIC0gU2V0dXBzIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24KKyAvLyAgIC0gRGlzcGxheXMgZXZlbnRzIHN0YXR1c2VzIGFuZCBpbmZvcm1hdGlvbgorIC8vICAgLSBHZW5lcmF0ZXMgbmV3IFBDCisgLy8gLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGV4ZWN1dGVkIGluc3RydWN0aW9ucyBhbmQgZWxhcHNlZAorIC8vICAgY3ljbGVzCisgLy8gLSBQcm92aWRlcyBpbnRlcmZhY2VzIGZvciBJUElDLCBIRFUgYW5kIFREVSByZWdpc3RlcnMgYWNjZXNzCisgLy8KKyAvLyBTdHJ1Y3R1cmU6CisgLy8gLSBFdmVudHMgKEVYQywgSVJRLCBNUkVUKSBsb2dpYworIC8vIC0gQ1NSIHJlYWQvd3JpdGUgaW50ZXJmYWNlCisgLy8gLSBDU1IgcmVnaXN0ZXJzOgorIC8vICAgLSBNYWNoaW5lIFRyYXAgU2V0dXAgcmVnaXN0ZXJzCisgLy8gICAtIE1hY2hpbmUgVHJhcCBIYW5kbGluZyByZWdpc3RlcnMKKyAvLyAgIC0gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgcmVnaXN0ZXJzCisgLy8gICAtIE5vbi1zdGFuZGFyZCBDU1JzIChNQ09VTlRFTikKKyAvLyAtIENTUiA8LT4gRVhVIGkvZgorIC8vIC0gQ1NSIDwtPiBJUElDIGkvZgorIC8vIC0gQ1NSIDwtPiBIRFUgaS9mCisgLy8gLSBDU1IgPC0+IFREVSBpL2YKKyAvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgorYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCitgaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgorYGlmZGVmIFNDUjFfSVBJQ19FTgorYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX2hkdS5zdmgiCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2BpZmRlZiBTQ1IxX1REVV9FTgorYGluY2x1ZGUgInNjcjFfdGR1LnN2aCIKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCittb2R1bGUgc2NyMV9waXBlX2NzciAoCisgICAgLy8gQ29tbW9uCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBDU1IgcmVzZXQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdhdGVkIENTUiBjbG9jaworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfYWx3X29uLCAgICAgICAgICAgICAgICAgLy8gTm90LWdhdGVkIENTUiBjbG9jaworYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorCisgICAgLy8gU09DIHNpZ25hbHMKKyAgICAvLyBJUlEKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9pcnFfZXh0X2ksICAgICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJjc3JfaXJxX3NvZnRfaSwgICAgICAgICAvLyBTb2Z0d2FyZSBpbnRlcnJ1cHQgcmVxdWVzdAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MyY3NyX2lycV9tdGltZXJfaSwgICAgICAgLy8gRXh0ZXJuYWwgdGltZXIgaW50ZXJydXB0IHJlcXVlc3QKKworICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKKyAgICBpbnB1dCAgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9tdGltZXJfdmFsX2ksICAgICAgIC8vIEV4dGVybmFsIHRpbWVyIHZhbHVlCisKKyAgICAvLyBNSEFSVElEIGZ1c2UKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgc29jMmNzcl9mdXNlX21oYXJ0aWRfaSwgICAgIC8vIE1IQVJUSUQgZnVzZQorCisgICAgLy8gQ1NSIDwtPiBFWFUgcmVhZC93cml0ZSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9yX3JlcV9pLCAgICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFkZHJlc3MKKyAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgZXh1MmNzcl9yd19hZGRyX2ksICAgICAgICAgIC8vIENTUiByZWFkIHJlcXVlc3QKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yX2RhdGFfbywgICAgICAgICAgIC8vIENTUiByZWFkIGRhdGEKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9pLCAgICAgICAgICAgIC8vIENTUiB3cml0ZSByZXF1ZXN0CisgICAgaW5wdXQgICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19jbWRfaSwgICAgICAgICAgICAvLyBDU1Igd3JpdGUgY29tbWFuZAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3dfZGF0YV9pLCAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGRhdGEKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yd19leGNfbywgICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFjY2VzcyBleGNlcHRpb24KKworICAgIC8vIENTUiA8LT4gRVhVIGV2ZW50IGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfaXJxX2ksICAgICAgICAgLy8gVGFrZSBJUlEgdHJhcAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfZXhjX2ksICAgICAgICAgLy8gVGFrZSBleGNlcHRpb24gdHJhcAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfdXBkYXRlX2ksICAgICAgLy8gTVJFVCB1cGRhdGUgQ1NSCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9pLCAgICAgICAvLyBNUkVUIGluc3RydWN0aW9uCisgICAgaW5wdXQgICB0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfZXhjX2NvZGVfaSwgICAgICAgICAvLyBFeGNlcHRpb24gY29kZSAoc2VlIHNjcjFfYXJjaF90eXBlcy5zdmgpCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdHJhcF92YWxfaSwgICAgICAgICAvLyBUcmFwIHZhbHVlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfaXJxX28sICAgICAgICAgICAgICAvLyBJUlEgcmVxdWVzdAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X2lwX2llX28sICAgICAgICAgICAgLy8gU29tZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfbXN0YXR1c19taWVfdXBfbywgICAvLyBNU1RBVFVTIG9yIE1JRSB1cGRhdGUgaW4gdGhlIGN1cnJlbnQgY3ljbGUKKworYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgIC8vIENTUiA8LT4gSVBJQyBpbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfcl9yZXFfbywgICAgICAgICAgIC8vIElQSUMgcmVhZCByZXF1ZXN0CisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxX28sICAgICAgICAgICAvLyBJUElDIHdyaXRlIHJlcXVlc3QKKyAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfYWRkcl9vLCAgICAgICAgICAgIC8vIElQSUMgYWRkcmVzcworICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY193ZGF0YV9vLCAgICAgICAgICAgLy8gSVBJQyB3cml0ZSBkYXRhCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhX2ksICAgICAgICAgICAvLyBJUElDIHJlYWQgZGF0YQorYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAvLyBDU1IgPC0+IEhEVSBpbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXFfbywgICAgICAgICAgICAgIC8vIFJlcXVlc3QgdG8gSERVCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfY21kX28sICAgICAgICAgICAgICAvLyBIRFUgY29tbWFuZAorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXSAgICBjc3IyaGR1X2FkZHJfbywgICAgICAgICAgICAgLy8gSERVIGFkZHJlc3MKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV93ZGF0YV9vLCAgICAgICAgICAgIC8vIEhEVSB3cml0ZSBkYXRhCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmRhdGFfaSwgICAgICAgICAgICAvLyBIRFUgcmVhZCBkYXRhCisgICAgaW5wdXQgICB0eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmVzcF9pLCAgICAgICAgICAgICAvLyBIRFUgcmVzcG9uc2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmNzcl9ub19jb21taXRfaSwgICAgICAgIC8vIEZvcmJpZCBpbnN0cnVjdGlvbiBjb21taXRtZW50CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGlmZGVmIFNDUjFfVERVX0VOCisgICAgLy8gQ1NSIDwtPiBURFUgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfcmVxX28sICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIFREVQorICAgIG91dHB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X2NtZF9vLCAgICAgICAgICAgICAgLy8gVERVIGNvbW1hbmQKKyAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgICAgICAgY3NyMnRkdV9hZGRyX28sICAgICAgICAgICAgIC8vIFREVSBhZGRyZXNzCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfd2RhdGFfbywgICAgICAgICAgICAvLyBURFUgd3JpdGUgZGF0YQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX2ksICAgICAgICAgICAgLy8gVERVIHJlYWQgZGF0YQorICAgIGlucHV0ICAgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3Jlc3BfaSwgICAgICAgICAgICAgLy8gVERVIHJlc3BvbnNlCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworICAgIC8vIENTUiA8LT4gRVhVIFBDIGludGVyZmFjZQorYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX2luc3RyZXRfbm9fZXhjX2ksICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aG91dCBleGNlcHRpb24pCitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9wY19jdXJyX2ksICAgICAgICAgIC8vIEN1cnJlbnQgUEMKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9wY19uZXh0X2ksICAgICAgICAgIC8vIE5leHQgUEMKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGNfbyAgICAgICAgICAgIC8vIEV4Y2VwdGlvbi9JUlEvTVJFVCBuZXcgUEMKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaWZkZWYgU0NSMV9SVkNfRVhUCisgICAgbG9jYWxwYXJhbSBQQ19MU0IgPSAxOworYGVsc2UKKyAgICBsb2NhbHBhcmFtIFBDX0xTQiA9IDI7CitgZW5kaWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIE1hY2hpbmUgVHJhcCBTZXR1cCByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIE1TVEFUVVMgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c191cGQ7ICAgICAgICAvLyBNU1RBVFVTIHVwZGF0ZSBlbmFibGUKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1czsgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1TVEFUVVMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19taWVfZmY7ICAgICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0OyAgIC8vIE1TVEFUVVM6IEdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIG5leHQgdmFsdWUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX2ZmOyAgICAvLyBNU1RBVFVTOiBHbG9iYWwgaW50ZXJydXB0IGVuYWJsZSBwcmlvciB0byB0aGUgdHJhcAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tc3RhdHVzX21waWVfbmV4dDsgIC8vIE1TVEFUVVM6IEdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIHByaW9yIHRvIHRoZSB0cmFwIG5leHQgdmFsdWUKKworLy8gTUlFIHJlZ2lzdGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZV91cGQ7ICAgICAgICAgICAgLy8gTUlFIHVwZGF0ZSBlbmFibGUKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWllOyAgICAgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1JRQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taWVfbXRpZV9mZjsgICAgICAgIC8vIE1JRTogTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pZV9tZWllX2ZmOyAgICAgICAgLy8gTUlFOiBNYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWllX21zaWVfZmY7ICAgICAgICAvLyBNSUU6IE1hY2hpbmUgc29mdHdhcmUgaW50ZXJydXB0IGVuYWJsZQorCisvLyBNVFZFQyByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZlY191cGQ7ICAgICAgICAgIC8vIE1UVkVDIHVwZGF0ZSBlbmFibGUKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6U0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFNdICBjc3JfbXR2ZWNfYmFzZTsgICAgICAgICAvLyBNVFZFQzogQmFzZSAodXBwZXIgMjYgYml0cykKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfbW9kZTsgICAgICAgICAvLyBNVFZFQzogTW9kZSAoMC1kaXJlY3QsIDEtdmVjdG9yZWQpICh3aXJlZCkKK2BpZmRlZiBTQ1IxX01UVkVDX01PREVfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfbW9kZV9mZjsgICAgICAvLyBNVFZFQzogTW9kZSAoMC1kaXJlY3QsIDEtdmVjdG9yZWQpIChyZWdpc3RlcmVkKQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZlY19tb2RlX3ZlY3Q7CitgZW5kaWYKKworLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gTVNDUkFUQ0ggcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXNjcmF0Y2hfdXBkOyAgICAgICAvLyBNU0NSQVRDSCB1cGRhdGUgZW5hYmxlCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21zY3JhdGNoX2ZmOyAgICAgICAgLy8gTVNDUkFUQ0gKKworLy8gTUVQQyByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX3VwZDsgICAgICAgICAgIC8vIE1FUEMgdXBkYXRlIGVuYWJsZQorbG9naWMgW2BTQ1IxX1hMRU4tMTpQQ19MU0JdICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX2ZmOyAgICAgICAgICAgIC8vIE1FUEMgcmVnaXN0ZXJlZCB2YWx1ZQorbG9naWMgW2BTQ1IxX1hMRU4tMTpQQ19MU0JdICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjX25leHQ7ICAgICAgICAgIC8vIE1FUEMgbmV4dCB2YWx1ZQorbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tZXBjOyAgICAgICAgICAgICAgIC8vIE1FUEMgcmVnaXN0ZXJlZCB2YWx1ZSBleHRlbmRlZCB0byBYTEVOCisKKy8vIE1DQVVTRSByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfdXBkOyAgICAgICAgIC8vIE1DQVVTRSB1cGRhdGUgZW5hYmxlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9pX2ZmOyAgICAgICAgLy8gTUNBVVNFOiBJbnRlcnJ1cHQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dDsgICAgICAvLyBNQ0FVU0U6IEludGVycnVwdCBuZXh0IHZhbHVlCit0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jYXVzZV9lY19mZjsgICAgICAgLy8gTUNBVVNFOiBFeGNlcHRpb24gY29kZQordHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV4dDsgICAgIC8vIE1DQVVTRTogRXhjZXB0aW9uIGNvZGUgbmV4dCB2YWx1ZQordHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV3OyAgICAgIC8vIE1DQVVTRTogRXhjZXB0aW9uIGNvZGUgbmV3IHZhbHVlIChJUlFzKQorCisvLyBNVFZBTCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tdHZhbF91cGQ7ICAgICAgICAgIC8vIE1UVkFMIHVwZGF0ZSBlbmFibGUKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbXR2YWxfZmY7ICAgICAgICAgICAvLyBNVFZBTCByZWdpc3RlcmVkIHZhbHVlCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX210dmFsX25leHQ7ICAgICAgICAgLy8gTVRWQUwgbmV4dCB2YWx1ZQorCisvLyBNSVAgcmVnaXN0ZXIKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWlwOyAgICAgICAgICAgICAgICAvLyBBZ2dyZWdhdGVkIE1JUAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbXRpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgcGVuZGluZworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbWVpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSBleHRlcm5hbCBpbnRlcnJ1cHQgcGVuZGluZworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taXBfbXNpcDsgICAgICAgICAgIC8vIE1JUDogTWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcGVuZGluZworCisvLyBNYWNoaW5lIENvdW50ZXJzL1RpbWVycyByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKKy8vIE1JTlNUUkVUIHJlZ2lzdGVyCitsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X3VwZDsKK2xvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjBdICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2xvX2luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfbG9fdXBkOworbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9sb19mZjsKK2xvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfbG9fbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWluc3RyZXRfaGlfaW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV91cGQ7Citsb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21pbnN0cmV0X2hpX2ZmOworbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV9uZXh0OworbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6OF0gICAgICAgICAgICAgICAgIGNzcl9taW5zdHJldF9oaV9uZXc7CisKKy8vIE1DWUNMRSByZWdpc3RlcgorbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY3ljbGVfdXBkOworbG9naWMgW1NDUjFfQ1NSX0NPVU5URVJTX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgIGNzcl9tY3ljbGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb19pbmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb191cGQ7Citsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9sb19mZjsKK2xvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlX2xvX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9pbmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV91cGQ7Citsb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9mZjsKK2xvZ2ljIFtTQ1IxX0NTUl9DT1VOVEVSU19XSURUSC0xOjhdICAgICAgICAgICAgICAgICBjc3JfbWN5Y2xlX2hpX25leHQ7Citsb2dpYyBbU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEgtMTo4XSAgICAgICAgICAgICAgICAgY3NyX21jeWNsZV9oaV9uZXc7CitgZW5kaWYgLy8gflNDUjFfQ1NSX1JFRFVDRURfQ05UCisKKy8vIE5vbi1zdGFuZGFyZCBDU1JzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBNQ09VTlRFTiByZWdpc3RlcgorYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvdW50ZW5fdXBkOyAgICAgICAvLyBNQ09VTlRFTiB1cGRhdGUgZW5hYmxlCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb3VudGVuOyAgICAgICAgICAgLy8gQWdncmVnYXRlZCBNQ09VTlRFTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY291bnRlbl9jeV9mZjsgICAgIC8vIEN5Y2xlIGNvdW50IGVuYWJsZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY291bnRlbl9pcl9mZjsgICAgIC8vIEluc3RyZXQgY291bnQgZW5hYmxlCitgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgorCisvLyBDU1IgcmVhZC93cml0ZSBpL2YKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfcl9kYXRhOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl93X2RhdGE7CisKKy8vIEV2ZW50cyAoZXhjZXB0aW9ucywgaW50ZXJydXB0cywgbXJldCkgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRXZlbnQgZmxhZ3MKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2V4YzsgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgZXhjZXB0aW9uIHRyYXAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2lycTsgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgSVJRIHRyYXAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX21yZXQ7ICAgICAgICAgICAgIC8vIE1SRVQgaW5zdHJ1Y3Rpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX2lycV9ubXJldDsgICAgICAgIC8vIElSUSB0cmFwIHdpdGhvdXQgTVJFVCBpbnN0cnVjdGlvbgorCisvLyBJbnRlcnJ1cHQgcGVuZGluZyAmIGVuYWJsZSBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2VpcnFfcG5kX2VuOyAgICAvLyBFeHRlcm5hbCBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3NpcnFfcG5kX2VuOyAgICAvLyBTb2Z0d2FyZSBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3RpcnFfcG5kX2VuOyAgICAvLyBUaW1lciBJUlEgcGVuZGluZyBhbmQgbG9jYWxseSBlbmFibGVkCisKKy8vIEV4Y2VwdGlvbiBmbGFncworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl93X2V4YzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfcl9leGM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3JlcV9ub19leGM7CisKKy8vIFJlcXVlc3RzIHRvIG90aGVyIG1vZHVsZXMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaXBpY19yZXE7CitgaWZkZWYgU0NSMV9EQkdfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaGR1X3JlcTsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGlmZGVmIFNDUjFfVERVX0VOCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Jya21fcmVxOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFdmVudHMgKElSUSwgRVhDLCBNUkVUKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRXZlbnRzIHByaW9yaXR5Cithc3NpZ24gZV9leGMgICAgPSBleHUyY3NyX3Rha2VfZXhjX2kKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICYgfmhkdTJjc3Jfbm9fY29tbWl0X2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiBlX2lycSAgICA9IGV4dTJjc3JfdGFrZV9pcnFfaSAmIH5leHUyY3NyX3Rha2VfZXhjX2kKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICYgfmhkdTJjc3Jfbm9fY29tbWl0X2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiBlX21yZXQgICA9IGV4dTJjc3JfbXJldF91cGRhdGVfaQorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgJiB+aGR1MmNzcl9ub19jb21taXRfaQorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgOworYXNzaWduIGVfaXJxX25tcmV0ID0gZV9pcnEgJiB+ZXh1MmNzcl9tcmV0X2luc3RyX2k7CisKKy8vIElSUSBwZW5kaW5nICYgZW5hYmxlIHNpZ25hbHMKK2Fzc2lnbiBjc3JfZWlycV9wbmRfZW4gPSBjc3JfbWlwX21laXAgJiBjc3JfbWllX21laWVfZmY7Cithc3NpZ24gY3NyX3NpcnFfcG5kX2VuID0gY3NyX21pcF9tc2lwICYgY3NyX21pZV9tc2llX2ZmOworYXNzaWduIGNzcl90aXJxX3BuZF9lbiA9IGNzcl9taXBfbXRpcCAmIGNzcl9taWVfbXRpZV9mZjsKKworLy8gSVJRIGV4Y2VwdGlvbiBjb2RlcyBwcmlvcml0eQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorICAgICAgICBjc3JfZWlycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gdHlwZV9zY3IxX2V4Y19jb2RlX2UnKFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUwpOworICAgICAgICBjc3Jfc2lycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gdHlwZV9zY3IxX2V4Y19jb2RlX2UnKFNDUjFfRVhDX0NPREVfSVJRX01fU09GVFdBUkUpOworICAgICAgICBjc3JfdGlycV9wbmRfZW46IGNzcl9tY2F1c2VfZWNfbmV3ID0gdHlwZV9zY3IxX2V4Y19jb2RlX2UnKFNDUjFfRVhDX0NPREVfSVJRX01fVElNRVIpOworICAgICAgICBkZWZhdWx0ICAgICAgICA6IGNzcl9tY2F1c2VfZWNfbmV3ID0gdHlwZV9zY3IxX2V4Y19jb2RlX2UnKFNDUjFfRVhDX0NPREVfSVJRX01fRVhURVJOQUwpOworICAgIGVuZGNhc2UKK2VuZAorCithc3NpZ24gZXh1X3JlcV9ub19leGMgPSAoKGV4dTJjc3Jfcl9yZXFfaSAmIH5jc3Jfcl9leGMpCisgICAgICAgICAgICAgICAgICAgICAgfCAgKGV4dTJjc3Jfd19yZXFfaSAmIH5jc3Jfd19leGMpKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENTUiByZWFkL3dyaXRlIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ1NSIHJlYWQgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY3NyX3JfZGF0YSAgICAgPSAnMDsKKyAgICBjc3Jfcl9leGMgICAgICA9IDEnYjA7CitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBjc3JfaGR1X3JlcSAgICA9IDEnYjA7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgIGNzcl9icmttX3JlcSAgID0gMSdiMDsKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgIGNzcjJpcGljX3JfcmVxX28gPSAxJ2IwOworYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorCisgICAgY2FzZXogKGV4dTJjc3JfcndfYWRkcl9pKQorICAgICAgICAvLyBNYWNoaW5lIEluZm9ybWF0aW9uIFJlZ2lzdGVycyAocmVhZC1vbmx5KQorICAgICAgICBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRCA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NVkVORE9SSUQ7CisgICAgICAgIFNDUjFfQ1NSX0FERFJfTUFSQ0hJRCAgIDogY3NyX3JfZGF0YSAgICA9IFNDUjFfQ1NSX01BUkNISUQ7CisgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlNUElEICAgIDogY3NyX3JfZGF0YSAgICA9IFNDUjFfQ1NSX01JTVBJRDsKKyAgICAgICAgU0NSMV9DU1JfQUREUl9NSEFSVElEICAgOiBjc3Jfcl9kYXRhICAgID0gc29jMmNzcl9mdXNlX21oYXJ0aWRfaTsKKworICAgICAgICAvLyBNYWNoaW5lIFRyYXAgU2V0dXAgKHJlYWQtd3JpdGUpCisgICAgICAgIFNDUjFfQ1NSX0FERFJfTVNUQVRVUyAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tc3RhdHVzOworICAgICAgICBTQ1IxX0NTUl9BRERSX01JU0EgICAgICA6IGNzcl9yX2RhdGEgICAgPSBTQ1IxX0NTUl9NSVNBOworICAgICAgICBTQ1IxX0NTUl9BRERSX01JRSAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWllOworICAgICAgICBTQ1IxX0NTUl9BRERSX01UVkVDICAgICA6IGNzcl9yX2RhdGEgICAgPSB7Y3NyX210dmVjX2Jhc2UsIDQnZDAsIDInKGNzcl9tdHZlY19tb2RlKX07CisKKyAgICAgICAgLy8gTWFjaGluZSBUcmFwIEhhbmRsaW5nIChyZWFkLXdyaXRlKQorICAgICAgICBTQ1IxX0NTUl9BRERSX01TQ1JBVENIICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbXNjcmF0Y2hfZmY7CisgICAgICAgIFNDUjFfQ1NSX0FERFJfTUVQQyAgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tZXBjOworICAgICAgICBTQ1IxX0NTUl9BRERSX01DQVVTRSAgICA6IGNzcl9yX2RhdGEgICAgPSB7Y3NyX21jYXVzZV9pX2ZmLCB0eXBlX3NjcjFfY3NyX21jYXVzZV9lY192Jyhjc3JfbWNhdXNlX2VjX2ZmKX07CisgICAgICAgIFNDUjFfQ1NSX0FERFJfTVRWQUwgICAgIDogY3NyX3JfZGF0YSAgICA9IGNzcl9tdHZhbF9mZjsKKyAgICAgICAgU0NSMV9DU1JfQUREUl9NSVAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pcDsKKworICAgICAgICAvLyBVc2VyIENvdW50ZXJzL1RpbWVycyAocmVhZC1vbmx5KQorICAgICAgICB7U0NSMV9DU1JfQUREUl9IUE1DT1VOVEVSX01BU0ssIDUnYj8/Pz8/fSAgIDogYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCisgICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gc29jMmNzcl9tdGltZXJfdmFsX2lbMzE6MF07CitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21jeWNsZVszMTowXTsKKyAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWluc3RyZXRbMzE6MF07CitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAwCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorCisgICAgICAgIHtTQ1IxX0NTUl9BRERSX0hQTUNPVU5URVJIX01BU0ssIDUnYj8/Pz8/fSAgOiBiZWdpbgorICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKKyAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBzb2MyY3NyX210aW1lcl92YWxfaVs2MzozMl07CitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21jeWNsZVs2MzozMl07CisgICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pbnN0cmV0WzYzOjMyXTsKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gTWFjaGluZSBDb3VudGVycy9UaW1lcnMgKHJlYWQtd3JpdGUpCisgICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSX01BU0ssIDUnYj8/Pz8/fSAgOiBiZWdpbgorICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKKyAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl9yX2V4YyAgICAgPSBleHUyY3NyX3JfcmVxX2k7CitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21jeWNsZVszMTowXTsKKyAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9yX2RhdGEgICAgPSBjc3JfbWluc3RyZXRbMzE6MF07CitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAwCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorCisgICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSSF9NQVNLLCA1J2I/Pz8/P30gOiBiZWdpbgorICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKKyAgICAgICAgICAgICAgICA1J2QxICAgICAgICA6IGNzcl9yX2V4YyAgICAgPSBleHUyY3NyX3JfcmVxX2k7CitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21jeWNsZVs2MzozMl07CisgICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21pbnN0cmV0WzYzOjMyXTsKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgZW5kCisKKyAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUVWRU5UX01BU0ssIDUnYj8/Pz8/fSAgICA6IGJlZ2luCisgICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQorICAgICAgICAgICAgICAgIDUnZDAsCisgICAgICAgICAgICAgICAgNSdkMSwKKyAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl9yX2V4YyA9IGV4dTJjc3Jfcl9yZXFfaTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAwCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorCitgaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgorICAgICAgICBTQ1IxX0NTUl9BRERSX01DT1VOVEVOICAgICAgOiBjc3Jfcl9kYXRhICAgID0gY3NyX21jb3VudGVuOworYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KKworYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgICAgICAvLyBJUElDIHJlZ2lzdGVycworICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lTViwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0NJQ1NSLAorICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSVBSLAorICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSVNWUiwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0VPSSwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX1NPSSwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lEWCwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0lDU1IgICAgIDogYmVnaW4KKyAgICAgICAgICAgIGNzcl9yX2RhdGEgICAgICAgPSBpcGljMmNzcl9yZGF0YV9pOworICAgICAgICAgICAgY3NyMmlwaWNfcl9yZXFfbyA9IGV4dTJjc3Jfcl9yZXFfaTsKKyAgICAgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAvLyBIRFUgcmVnaXN0ZXJzCisgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RDU1IsCisgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RQQywKKyAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gwLAorICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDEgOiBiZWdpbgorICAgICAgICAgICAgY3NyX2hkdV9yZXEgPSAxJ2IxOworICAgICAgICAgICAgY3NyX3JfZGF0YSAgPSBoZHUyY3NyX3JkYXRhX2k7CisgICAgICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAvLyBURFUgcmVnaXN0ZXJzCisgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1RTRUxFQ1QsCisgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1REQVRBMSwKKyAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfVERBVEEyLAorICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9USU5GTzogYmVnaW4KKyAgICAgICAgICAgIGNzcl9icmttX3JlcSAgICA9IDEnYjE7CisgICAgICAgICAgICBjc3Jfcl9kYXRhICAgICAgPSB0ZHUyY3NyX3JkYXRhX2k7CisgICAgICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKyAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgorICAgICAgICAgICAgY3NyX3JfZXhjICAgPSBleHUyY3NyX3JfcmVxX2k7CisgICAgICAgIGVuZAorICAgIGVuZGNhc2UgLy8gZXh1MmNzcl9yd19hZGRyX2kKK2VuZAorCithc3NpZ24gY3NyMmV4dV9yX2RhdGFfbyA9IGNzcl9yX2RhdGE7CisKKy8vIENTUiB3cml0ZSBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlIChleHUyY3NyX3dfY21kX2kpCisgICAgICAgIFNDUjFfQ1NSX0NNRF9XUklURSAgOiBjc3Jfd19kYXRhID0gIGV4dTJjc3Jfd19kYXRhX2k7CisgICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQgICAgOiBjc3Jfd19kYXRhID0gIGV4dTJjc3Jfd19kYXRhX2kgfCBjc3Jfcl9kYXRhOworICAgICAgICBTQ1IxX0NTUl9DTURfQ0xFQVIgIDogY3NyX3dfZGF0YSA9IH5leHUyY3NyX3dfZGF0YV9pICYgY3NyX3JfZGF0YTsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGNzcl93X2RhdGEgPSAnMDsKKyAgICBlbmRjYXNlCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjc3JfbXN0YXR1c191cGQgICAgID0gMSdiMDsKKyAgICBjc3JfbWllX3VwZCAgICAgICAgID0gMSdiMDsKKyAgICBjc3JfbXNjcmF0Y2hfdXBkICAgID0gMSdiMDsKKyAgICBjc3JfbWVwY191cGQgICAgICAgID0gMSdiMDsKKyAgICBjc3JfbWNhdXNlX3VwZCAgICAgID0gMSdiMDsKKyAgICBjc3JfbXR2YWxfdXBkICAgICAgID0gMSdiMDsKKyAgICBjc3JfbXR2ZWNfdXBkICAgICAgID0gMSdiMDsKKworYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgIGNzcl9tY3ljbGVfdXBkICAgICAgPSAyJ2IwMDsKKyAgICBjc3JfbWluc3RyZXRfdXBkICAgID0gMidiMDA7CitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKworYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KKyAgICBjc3JfbWNvdW50ZW5fdXBkICAgID0gMSdiMDsKK2BlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCisgICAgY3NyX3dfZXhjICAgICAgICAgICA9IDEnYjA7CitgaWZkZWYgU0NSMV9JUElDX0VOCisgICAgY3NyMmlwaWNfd19yZXFfbyAgICA9IDEnYjA7CitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKKyAgICBpZiAoZXh1MmNzcl93X3JlcV9pKSBiZWdpbgorICAgICAgICBjYXNleiAoZXh1MmNzcl9yd19hZGRyX2kpCisgICAgICAgICAgICAvLyBNYWNoaW5lIFRyYXAgU2V0dXAgKHJlYWQtd3JpdGUpCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01TVEFUVVMgICA6IGNzcl9tc3RhdHVzX3VwZCAgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlTQSAgICAgIDogYmVnaW4gZW5kCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01JRSAgICAgICA6IGNzcl9taWVfdXBkICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTVRWRUMgICAgIDogY3NyX210dmVjX3VwZCAgICAgPSAxJ2IxOworCisgICAgICAgICAgICAvLyBNYWNoaW5lIFRyYXAgSGFuZGxpbmcgKHJlYWQtd3JpdGUpCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01TQ1JBVENIICA6IGNzcl9tc2NyYXRjaF91cGQgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUVQQyAgICAgIDogY3NyX21lcGNfdXBkICAgICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NQ0FVU0UgICAgOiBjc3JfbWNhdXNlX3VwZCAgICA9IDEnYjE7CisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01UVkFMICAgICA6IGNzcl9tdHZhbF91cGQgICAgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUlQICAgICAgIDogYmVnaW4gZW5kCisKKyAgICAgICAgICAgIC8vIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIChyZWFkLXdyaXRlKQorICAgICAgICAgICAge1NDUjFfQ1NSX0FERFJfTUhQTUNPVU5URVJfTUFTSywgNSdiPz8/Pz99ICA6IGJlZ2luCisgICAgICAgICAgICAgICAgY2FzZSAoZXh1MmNzcl9yd19hZGRyX2lbNDowXSkKKyAgICAgICAgICAgICAgICAgICAgNSdkMSAgICAgICAgOiBjc3Jfd19leGMgICAgICAgICAgID0gMSdiMTsKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICAgICAgICAgICAgICAgICAgNSdkMCAgICAgICAgOiBjc3JfbWN5Y2xlX3VwZFswXSAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgNSdkMiAgICAgICAgOiBjc3JfbWluc3RyZXRfdXBkWzBdID0gMSdiMTsKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHtTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSSF9NQVNLLCA1J2I/Pz8/P30gOiBiZWdpbgorICAgICAgICAgICAgICAgIGNhc2UgKGV4dTJjc3JfcndfYWRkcl9pWzQ6MF0pCisgICAgICAgICAgICAgICAgICAgIDUnZDEgICAgICAgIDogY3NyX3dfZXhjICAgICAgICAgICA9IDEnYjE7CitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgICAgICAgICAgICAgICAgIDUnZDAgICAgICAgIDogY3NyX21jeWNsZV91cGRbMV0gICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIDUnZDIgICAgICAgIDogY3NyX21pbnN0cmV0X3VwZFsxXSA9IDEnYjE7CitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICB7U0NSMV9DU1JfQUREUl9NSFBNRVZFTlRfTUFTSywgNSdiPz8/Pz99ICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlIChleHUyY3NyX3J3X2FkZHJfaVs0OjBdKQorICAgICAgICAgICAgICAgICAgICA1J2QwLAorICAgICAgICAgICAgICAgICAgICA1J2QxLAorICAgICAgICAgICAgICAgICAgICA1J2QyICAgICAgICA6IGNzcl93X2V4YyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICBlbmQKKworYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfTUNPVU5URU4gICAgICA6IGNzcl9tY291bnRlbl91cGQgPSAxJ2IxOworYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KKworYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgICAgICAgICAgLy8gSVBJQyByZWdpc3RlcnMKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19DSUNTUiwKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JUFIsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfRU9JLAorICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX1NPSSwKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfSVBJQ19JRFgsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSUNTUiAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxX28gID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9JUElDX0NJU1YsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX0lQSUNfSVNWUiAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbiBvbiB3cml0ZQorICAgICAgICAgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX0FERFJfRENTUiwKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RQQywKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCwKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMSA6IGJlZ2luCisgICAgICAgICAgICBlbmQKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAgICAgICAgIC8vIFREVSByZWdpc3RlcnMKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX1RTRUxFQ1QsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTEsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9UREFUQTIsCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9USU5GTzogYmVnaW4KKyAgICAgICAgICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKyAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgIGNzcl93X2V4YyAgID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1hY2hpbmUgVHJhcCBTZXR1cCByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFJlZ2lzdGVyczoKKyAvLyAtIE1TVEFUVVMKKyAvLyAtIE1JRQorIC8vIC0gTVRWRUMKKy8vCisKKy8vIE1TVEFUVVMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25zaXN0cyBvZiAyIGJpdHMgLSBjdXJyZW50IGFuZCBwcmV2aW91cyAoYmVmb3JlIHRyYXApIGdsb2JhbCBpbnRlcnJ1cHQKKy8vIGVuYWJsZSBiaXRzIChNSUUgJiBNUElFKQorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfbXN0YXR1c19taWVfZmYgIDw9IFNDUjFfQ1NSX01TVEFUVVNfTUlFX1JTVF9WQUw7CisgICAgICAgIGNzcl9tc3RhdHVzX21waWVfZmYgPD0gU0NSMV9DU1JfTVNUQVRVU19NUElFX1JTVF9WQUw7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY3NyX21zdGF0dXNfbWllX2ZmICA8PSBjc3JfbXN0YXR1c19taWVfbmV4dDsKKyAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9mZiA8PSBjc3JfbXN0YXR1c19tcGllX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorICAgICAgICBlX2V4YywgZV9pcnEgIDogYmVnaW4KKyAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0ICA9IDEnYjA7CisgICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX25leHQgPSBjc3JfbXN0YXR1c19taWVfZmY7CisgICAgICAgIGVuZAorICAgICAgICBlX21yZXQgICAgICAgIDogYmVnaW4KKyAgICAgICAgICAgIGNzcl9tc3RhdHVzX21pZV9uZXh0ICA9IGNzcl9tc3RhdHVzX21waWVfZmY7CisgICAgICAgICAgICBjc3JfbXN0YXR1c19tcGllX25leHQgPSAxJ2IxOworICAgICAgICBlbmQKKyAgICAgICAgY3NyX21zdGF0dXNfdXBkOiBiZWdpbgorICAgICAgICAgICAgY3NyX21zdGF0dXNfbWllX25leHQgID0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NU1RBVFVTX01JRV9PRkZTRVRdOworICAgICAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9uZXh0ID0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NU1RBVFVTX01QSUVfT0ZGU0VUXTsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgY3NyX21zdGF0dXNfbWllX25leHQgID0gY3NyX21zdGF0dXNfbWllX2ZmOworICAgICAgICAgICAgY3NyX21zdGF0dXNfbXBpZV9uZXh0ID0gY3NyX21zdGF0dXNfbXBpZV9mZjsKKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY3NyX21zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcwOworICAgIGNzcl9tc3RhdHVzW1NDUjFfQ1NSX01TVEFUVVNfTUlFX09GRlNFVF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjc3JfbXN0YXR1c19taWVfZmY7CisgICAgY3NyX21zdGF0dXNbU0NSMV9DU1JfTVNUQVRVU19NUElFX09GRlNFVF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNzcl9tc3RhdHVzX21waWVfZmY7CisgICAgY3NyX21zdGF0dXNbU0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUKzE6U0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUXSA9IFNDUjFfQ1NSX01TVEFUVVNfTVBQOworZW5kCisKKy8vIE1JRSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRhaW5zIGludGVycnVwdCBlbmFibGUgYml0cyAoZXh0ZXJuYWwsIHNvZnR3YXJlLCB0aW1lciBJUlFzKQorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfbWllX210aWVfZmYgPD0gU0NSMV9DU1JfTUlFX01USUVfUlNUX1ZBTDsKKyAgICAgICAgY3NyX21pZV9tZWllX2ZmIDw9IFNDUjFfQ1NSX01JRV9NRUlFX1JTVF9WQUw7CisgICAgICAgIGNzcl9taWVfbXNpZV9mZiA8PSBTQ1IxX0NTUl9NSUVfTVNJRV9SU1RfVkFMOworICAgIGVuZCBlbHNlIGlmIChjc3JfbWllX3VwZCkgYmVnaW4KKyAgICAgICAgY3NyX21pZV9tdGllX2ZmIDw9IGNzcl93X2RhdGFbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXTsKKyAgICAgICAgY3NyX21pZV9tZWllX2ZmIDw9IGNzcl93X2RhdGFbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXTsKKyAgICAgICAgY3NyX21pZV9tc2llX2ZmIDw9IGNzcl93X2RhdGFbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXTsKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNzcl9taWUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcwOworICAgIGNzcl9taWVbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSA9IGNzcl9taWVfbXNpZV9mZjsKKyAgICBjc3JfbWllW1NDUjFfQ1NSX01JRV9NVElFX09GRlNFVF0gPSBjc3JfbWllX210aWVfZmY7CisgICAgY3NyX21pZVtTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVRdID0gY3NyX21pZV9tZWllX2ZmOworZW5kCisKKy8vIE1UVkVDIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSG9sZHMgdHJhcCB2ZWN0b3IgY29uZmlndWF0aW9uLiBDb25zaXN0cyBvZiBiYXNlIGFuZCBtb2RlIHBhcnRzCisKKy8vIE1UVkVDIEJBU0UgcGFydAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvbGRzIHRyYXAgdmVjdG9yIGJhc2UgYWRkcmVzcworZ2VuZXJhdGUKKyAgICAvLyBBbGwgYml0cyBvZiBNVFZFQyBiYXNlIGFyZSBSZWFkLU9ubHkgYW5kIGhhcmR3aXJlZCB0byAwJ3MKKyAgICBpZiAoU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPT0gMCkgYmVnaW4gOiBtdHZlY19iYXNlX3JvCisKKyAgICAgICAgYXNzaWduIGNzcl9tdHZlY19iYXNlICAgPSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUw7CisKKyAgICAvLyBBbGwgYml0cyBvZiBNVFZFQyBiYXNlIGFyZSBSVworICAgIGVuZCBlbHNlIGlmIChTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9PSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1ZBTF9CSVRTKSBiZWdpbiA6IG10dmVjX2Jhc2VfcncKKworICAgICAgICBhbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgICAgICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgICAgICAgICAgY3NyX210dmVjX2Jhc2UgIDw9IFNDUjFfQ1NSX01UVkVDX0JBU0VfUlNUX1ZBTDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChjc3JfbXR2ZWNfdXBkKSBiZWdpbgorICAgICAgICAgICAgICAgIGNzcl9tdHZlY19iYXNlICA8PSBjc3Jfd19kYXRhW2BTQ1IxX1hMRU4tMTpTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUU107CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisKKyAgICAvLyBMb3dlciBiaXRzIG9mIE1UVkVDIGJhc2UgYXJlIFJPLCBoaWdoZXIgLSBSVworICAgIGVuZCBlbHNlIGJlZ2luIDogbXR2ZWNfYmFzZV9yb19ydworCisgICAgICAgIGxvZ2ljIFsoYFNDUjFfWExFTi0xKTooYFNDUjFfWExFTi1TQ1IxX01UVkVDX0JBU0VfV1JfQklUUyldICAgY3NyX210dmVjX2Jhc2VfcmVnOworCisgICAgICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgICAgICAgICBjc3JfbXR2ZWNfYmFzZV9yZWcgPD0gU0NSMV9DU1JfTVRWRUNfQkFTRV9SU1RfVkFMWyhgU0NSMV9YTEVOLTEpLTpTQ1IxX01UVkVDX0JBU0VfV1JfQklUU10gOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKGNzcl9tdHZlY191cGQpIGJlZ2luCisgICAgICAgICAgICAgICAgY3NyX210dmVjX2Jhc2VfcmVnIDw9IGNzcl93X2RhdGFbKGBTQ1IxX1hMRU4tMSktOlNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTXTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBhc3NpZ24gY3NyX210dmVjX2Jhc2UgPSB7Y3NyX210dmVjX2Jhc2VfcmVnLCBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUxbU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMrOlNDUjFfQ1NSX01UVkVDX0JBU0VfUk9fQklUU119OworICAgIGVuZAorZW5kZ2VuZXJhdGUKKworLy8gTVRWRUMgTU9ERSBwYXJ0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2hvb3NlcyBiZXR3ZWVuIGRpcmVjdCAoYWxsIGV4Y2VwdGlvbnMgc2V0IFBDIHRvIEJBU0UpIG9yIHZlY3RvcmVkCisvLyAoYXN5bmNocm9ub3VzIGludGVycnVwdHMgc2V0IFBDIHRvIEJBU0UrNHhjYXVzZSkgaW50ZXJydXB0IG1vZGVzCisKK2BpZmRlZiBTQ1IxX01UVkVDX01PREVfRU4KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGNzcl9tdHZlY19tb2RlX2ZmIDw9IFNDUjFfQ1NSX01UVkVDX01PREVfRElSRUNUOworICAgIGVuZCBlbHNlIGlmIChjc3JfbXR2ZWNfdXBkKSBiZWdpbgorICAgICAgICBjc3JfbXR2ZWNfbW9kZV9mZiA8PSBjc3Jfd19kYXRhWzBdOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBjc3JfbXR2ZWNfbW9kZSAgICAgID0gY3NyX210dmVjX21vZGVfZmY7Cithc3NpZ24gY3NyX210dmVjX21vZGVfdmVjdCA9IChjc3JfbXR2ZWNfbW9kZV9mZiA9PSBTQ1IxX0NTUl9NVFZFQ19NT0RFX1ZFQ1RPUkVEKTsKK2BlbHNlIC8vIFNDUjFfTVRWRUNfTU9ERV9FTgorYXNzaWduIGNzcl9tdHZlY19tb2RlID0gU0NSMV9DU1JfTVRWRUNfTU9ERV9ESVJFQ1Q7CitgZW5kaWYgLy8gU0NSMV9NVFZFQ19NT0RFX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYWNoaW5lIFRyYXAgSGFuZGxpbmcgcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBSZWdpc3RlcnM6CisgLy8gLSBNU0NSQVRDSAorIC8vIC0gTUVQQworIC8vIC0gTUNBVVNFCisgLy8gLSBNVFZBTAorIC8vIC0gTUlQCisvLworCisvLyBNU0NSQVRDSCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvbGRzIGEgcG9pbnRlciB0byBhIG1hY2hpbmUtbW9kZSBoYXJ0LWxvY2FsIGNvbnRleHQgc3BhY2UKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX21zY3JhdGNoX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmIChjc3JfbXNjcmF0Y2hfdXBkKSBiZWdpbgorICAgICAgICBjc3JfbXNjcmF0Y2hfZmYgPD0gY3NyX3dfZGF0YTsKKyAgICBlbmQKK2VuZAorCisvLyBNRVBDIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2hlbiBhIHRyYXAgaXMgdGFrZW4gaW50byBNLW1vZGUgc2F2ZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiBpbnN0cnVjdGlvbiB0aGF0CisvLyB3YXMgaW50ZXJydXB0ZWQgb3IgdGhhdCBlbmNvdW50ZXJlZCB0aGUgZXhjZXB0aW9uCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGNzcl9tZXBjX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNzcl9tZXBjX2ZmIDw9IGNzcl9tZXBjX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorICAgICAgICBlX2V4YyAgICAgICA6IGNzcl9tZXBjX25leHQgPSBleHUyY3NyX3BjX2N1cnJfaVtgU0NSMV9YTEVOLTE6UENfTFNCXTsKKyAgICAgICAgZV9pcnFfbm1yZXQgOiBjc3JfbWVwY19uZXh0ID0gZXh1MmNzcl9wY19uZXh0X2lbYFNDUjFfWExFTi0xOlBDX0xTQl07CisgICAgICAgIGNzcl9tZXBjX3VwZDogY3NyX21lcGNfbmV4dCA9IGNzcl93X2RhdGFbYFNDUjFfWExFTi0xOlBDX0xTQl07CisgICAgICAgIGRlZmF1bHQgICAgIDogY3NyX21lcGNfbmV4dCA9IGNzcl9tZXBjX2ZmOworICAgIGVuZGNhc2UKK2VuZAorCitgaWZkZWYgU0NSMV9SVkNfRVhUCisgICAgYXNzaWduIGNzcl9tZXBjID0ge2Nzcl9tZXBjX2ZmLCAxJ2IwfTsKK2BlbHNlCisgICAgYXNzaWduIGNzcl9tZXBjID0ge2Nzcl9tZXBjX2ZmLCAyJ2IwMH07CitgZW5kaWYKKworLy8gTUNBVVNFIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2hlbiBhIHRyYXAgaXMgdGFrZW4gaW50byBNLW1vZGUgc2F2ZXMgYSBjb2RlIGluZGljYXRpbmcgdGhlIGV2ZW50IHRoYXQgY2F1c2VkCisvLyB0aGUgdHJhcAorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfbWNhdXNlX2lfZmYgIDw9IDEnYjA7CisgICAgICAgIGNzcl9tY2F1c2VfZWNfZmYgPD0gdHlwZV9zY3IxX2V4Y19jb2RlX2UnKFNDUjFfRVhDX0NPREVfUkVTRVQpOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNzcl9tY2F1c2VfaV9mZiAgPD0gY3NyX21jYXVzZV9pX25leHQ7CisgICAgICAgIGNzcl9tY2F1c2VfZWNfZmYgPD0gY3NyX21jYXVzZV9lY19uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgZV9leGMgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dCAgPSAxJ2IwOworICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXh0ID0gZXh1MmNzcl9leGNfY29kZV9pOworICAgICAgICBlbmQKKyAgICAgICAgZV9pcnEgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICBjc3JfbWNhdXNlX2lfbmV4dCAgPSAxJ2IxOworICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXh0ID0gY3NyX21jYXVzZV9lY19uZXc7CisgICAgICAgIGVuZAorICAgICAgICBjc3JfbWNhdXNlX3VwZDogYmVnaW4KKyAgICAgICAgICAgIGNzcl9tY2F1c2VfaV9uZXh0ICA9IGNzcl93X2RhdGFbYFNDUjFfWExFTi0xXTsKKyAgICAgICAgICAgIGNzcl9tY2F1c2VfZWNfbmV4dCA9IHR5cGVfc2NyMV9leGNfY29kZV9lJyhjc3Jfd19kYXRhW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdKTsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgY3NyX21jYXVzZV9pX25leHQgID0gY3NyX21jYXVzZV9pX2ZmOworICAgICAgICAgICAgY3NyX21jYXVzZV9lY19uZXh0ID0gY3NyX21jYXVzZV9lY19mZjsKKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKKy8vIE1UVkFMIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2hlbiBhIHRyYXAgaXMgdGFrZW4gaW50byBNLW1vZGUgaXMgZWl0aGVyIHNldCB0byB6ZXJvIG9yIHdyaXR0ZW4gd2l0aCBleGNlcHRpb24tCisvLyBzcGVjaWZpYyBpbmZvcm1hdGlvbgorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfbXR2YWxfZmYgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY3NyX210dmFsX2ZmIDw9IGNzcl9tdHZhbF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgZV9leGMgICAgICAgIDogY3NyX210dmFsX25leHQgPSBleHUyY3NyX3RyYXBfdmFsX2k7CisgICAgICAgIGVfaXJxICAgICAgICA6IGNzcl9tdHZhbF9uZXh0ID0gJzA7CisgICAgICAgIGNzcl9tdHZhbF91cGQ6IGNzcl9tdHZhbF9uZXh0ID0gY3NyX3dfZGF0YTsKKyAgICAgICAgZGVmYXVsdCAgICAgIDogY3NyX210dmFsX25leHQgPSBjc3JfbXR2YWxfZmY7CisgICAgZW5kY2FzZQorZW5kCisKKy8vIE1JUCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHBlbmRpbmcgaW50ZXJydXB0cyAoZXh0ZXJuYWwsIHNvZnR3YXJlLCB0aW1lciBJUlFzKQorCithc3NpZ24gY3NyX21pcF9tdGlwID0gc29jMmNzcl9pcnFfbXRpbWVyX2k7Cithc3NpZ24gY3NyX21pcF9tZWlwID0gc29jMmNzcl9pcnFfZXh0X2k7Cithc3NpZ24gY3NyX21pcF9tc2lwID0gc29jMmNzcl9pcnFfc29mdF9pOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGNzcl9taXAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcwOworICAgIGNzcl9taXBbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSA9IGNzcl9taXBfbXNpcDsKKyAgICBjc3JfbWlwW1NDUjFfQ1NSX01JRV9NVElFX09GRlNFVF0gPSBjc3JfbWlwX210aXA7CisgICAgY3NyX21pcFtTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVRdID0gY3NyX21pcF9tZWlwOworZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYWNoaW5lIENvdW50ZXJzL1RpbWVycyByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFJlZ2lzdGVyczoKKyAvLyAtIE1DWUNMRQorIC8vIC0gTUlOU1RSRVQKKy8vCisKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKKy8vIE1DWUNMRSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvbGRzIHRoZSBudW1iZXIgb2YgY2xvY2sgY3ljbGVzIHNpbmNlIHNvbWUgYXJiaXRyYXJ5IHBvaW50IG9mIHRpbWUgaW4gdGhlCisvLyBwYXN0IGF0IHdoaWNoIE1DWUNMRSB3YXMgemVybworCithc3NpZ24gY3NyX21jeWNsZV9sb19pbmMgPSAxJ2IxCisgYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAmIGNzcl9tY291bnRlbl9jeV9mZgorIGBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgOworYXNzaWduIGNzcl9tY3ljbGVfaGlfaW5jID0gY3NyX21jeWNsZV9sb19pbmMgJiAoJmNzcl9tY3ljbGVfbG9fZmYpOworCithc3NpZ24gY3NyX21jeWNsZV9sb191cGQgPSBjc3JfbWN5Y2xlX2xvX2luYyB8IGNzcl9tY3ljbGVfdXBkWzBdOworYXNzaWduIGNzcl9tY3ljbGVfaGlfdXBkID0gY3NyX21jeWNsZV9oaV9pbmMgfCAofGNzcl9tY3ljbGVfdXBkKTsKKworIGBpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyBgZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrX2Fsd19vbikgYmVnaW4KKyBgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX21jeWNsZV9sb19mZiA8PSAnMDsKKyAgICAgICAgY3NyX21jeWNsZV9oaV9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoY3NyX21jeWNsZV9sb191cGQpIGNzcl9tY3ljbGVfbG9fZmYgPD0gY3NyX21jeWNsZV9sb19uZXh0OworICAgICAgICBpZiAoY3NyX21jeWNsZV9oaV91cGQpIGNzcl9tY3ljbGVfaGlfZmYgPD0gY3NyX21jeWNsZV9oaV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBjc3JfbWN5Y2xlX2hpX25ldyAgPSBjc3JfbWN5Y2xlX2hpX2ZmICsgMSdiMTsKKworYXNzaWduIGNzcl9tY3ljbGVfbG9fbmV4dCA9IGNzcl9tY3ljbGVfdXBkWzBdID8gY3NyX3dfZGF0YVs3OjBdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jeWNsZV9sb19pbmMgPyBjc3JfbWN5Y2xlX2xvX2ZmICsgMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jeWNsZV9sb19mZjsKK2Fzc2lnbiBjc3JfbWN5Y2xlX2hpX25leHQgPSBjc3JfbWN5Y2xlX3VwZFswXSA/IHtjc3JfbWN5Y2xlX2hpX25ld1s2MzozMl0sIGNzcl93X2RhdGFbMzE6OF19CisgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jeWNsZV91cGRbMV0gPyB7Y3NyX3dfZGF0YSwgY3NyX21jeWNsZV9oaV9uZXdbMzE6OF19CisgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jeWNsZV9oaV9pbmMgPyBjc3JfbWN5Y2xlX2hpX25ldworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jeWNsZV9oaV9mZjsKKworYXNzaWduIGNzcl9tY3ljbGUgPSB7Y3NyX21jeWNsZV9oaV9mZiwgY3NyX21jeWNsZV9sb19mZn07CisKKy8vIE1JTlNUUkVUIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSG9sZHMgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgYnkgdGhlIGNvcmUgZnJvbSBzb21lIGFyYml0cmFyeSB0aW1lCisvLyBpbiB0aGUgcGFzdCBhdCB3aGljaCBNSU5TVFJFVCB3YXMgZXF1YWwgdG8gemVybworCithc3NpZ24gY3NyX21pbnN0cmV0X2xvX2luYyA9IGV4dTJjc3JfaW5zdHJldF9ub19leGNfaQorIGBpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNzcl9tY291bnRlbl9pcl9mZgorIGBlbmRpZiAvLyBTQ1IxX01DT1VOVEVOX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cithc3NpZ24gY3NyX21pbnN0cmV0X2hpX2luYyA9IGNzcl9taW5zdHJldF9sb19pbmMgJiAoJmNzcl9taW5zdHJldF9sb19mZik7CisKK2Fzc2lnbiBjc3JfbWluc3RyZXRfbG9fdXBkID0gY3NyX21pbnN0cmV0X2xvX2luYyB8IGNzcl9taW5zdHJldF91cGRbMF07Cithc3NpZ24gY3NyX21pbnN0cmV0X2hpX3VwZCA9IGNzcl9taW5zdHJldF9oaV9pbmMgfCAofGNzcl9taW5zdHJldF91cGQpOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfbWluc3RyZXRfbG9fZmYgPD0gJzA7CisgICAgICAgIGNzcl9taW5zdHJldF9oaV9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoY3NyX21pbnN0cmV0X2xvX3VwZCkgY3NyX21pbnN0cmV0X2xvX2ZmIDw9IGNzcl9taW5zdHJldF9sb19uZXh0OworICAgICAgICBpZiAoY3NyX21pbnN0cmV0X2hpX3VwZCkgY3NyX21pbnN0cmV0X2hpX2ZmIDw9IGNzcl9taW5zdHJldF9oaV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBjc3JfbWluc3RyZXRfaGlfbmV3ICA9IGNzcl9taW5zdHJldF9oaV9mZiArIDEnYjE7CisKK2Fzc2lnbiBjc3JfbWluc3RyZXRfbG9fbmV4dCA9IGNzcl9taW5zdHJldF91cGRbMF0gPyBjc3Jfd19kYXRhWzc6MF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9taW5zdHJldF9sb19pbmMgPyBjc3JfbWluc3RyZXRfbG9fZmYgKyAxJ2IxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21pbnN0cmV0X2xvX2ZmOworYXNzaWduIGNzcl9taW5zdHJldF9oaV9uZXh0ID0gY3NyX21pbnN0cmV0X3VwZFswXSA/IHtjc3JfbWluc3RyZXRfaGlfbmV3WzYzOjMyXSwgY3NyX3dfZGF0YVszMTo4XX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9taW5zdHJldF91cGRbMV0gPyB7Y3NyX3dfZGF0YSwgY3NyX21pbnN0cmV0X2hpX25ld1szMTo4XX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNzcl9taW5zdHJldF9oaV9pbmMgPyBjc3JfbWluc3RyZXRfaGlfbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21pbnN0cmV0X2hpX2ZmOworCithc3NpZ24gY3NyX21pbnN0cmV0ID0ge2Nzcl9taW5zdHJldF9oaV9mZiwgY3NyX21pbnN0cmV0X2xvX2ZmfTsKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTm9uLXN0YW5kYXJkIENTUgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KKy8vIE1DT1VOVEVOIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSG9sZHMgQ291bnRlcnMgZW5hYmxlIGJpdHMgKENZIC0gTUNZQ0xFIGNvdW50ZXI7IElSIC0gTUlOU1RSRVQgY291bnRlcikKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX21jb3VudGVuX2N5X2ZmIDw9IDEnYjE7CisgICAgICAgIGNzcl9tY291bnRlbl9pcl9mZiA8PSAxJ2IxOworICAgIGVuZCBlbHNlIGlmIChjc3JfbWNvdW50ZW5fdXBkKSBiZWdpbgorICAgICAgICBjc3JfbWNvdW50ZW5fY3lfZmYgPD0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NQ09VTlRFTl9DWV9PRkZTRVRdOworICAgICAgICBjc3JfbWNvdW50ZW5faXJfZmYgPD0gY3NyX3dfZGF0YVtTQ1IxX0NTUl9NQ09VTlRFTl9JUl9PRkZTRVRdOworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY3NyX21jb3VudGVuICAgID0gJzA7CisgICAgY3NyX21jb3VudGVuW1NDUjFfQ1NSX01DT1VOVEVOX0NZX09GRlNFVF0gICA9IGNzcl9tY291bnRlbl9jeV9mZjsKKyAgICBjc3JfbWNvdW50ZW5bU0NSMV9DU1JfTUNPVU5URU5fSVJfT0ZGU0VUXSAgID0gY3NyX21jb3VudGVuX2lyX2ZmOworZW5kCitgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ1NSIDwtPiBFWFUgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDU1IgZXhjZXB0aW9uCithc3NpZ24gY3NyMmV4dV9yd19leGNfbyA9IGNzcl9yX2V4YyB8IGNzcl93X2V4YworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgICAgICB8IChjc3IyaGR1X3JlcV9vICYgKGhkdTJjc3JfcmVzcF9pICE9IFNDUjFfQ1NSX1JFU1BfT0spKQorYGVuZGlmIC8vIFNDUjFfREJHX0VOCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGNzcjJ0ZHVfcmVxX28gJiAodGR1MmNzcl9yZXNwX2kgIT0gU0NSMV9DU1JfUkVTUF9PSykpCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiBjc3IyZXh1X2lwX2llX28gID0gY3NyX2VpcnFfcG5kX2VuIHwgY3NyX3NpcnFfcG5kX2VuIHwgY3NyX3RpcnFfcG5kX2VuOworYXNzaWduIGNzcjJleHVfaXJxX28gICAgPSBjc3IyZXh1X2lwX2llX28gJiBjc3JfbXN0YXR1c19taWVfZmY7CisKK2Fzc2lnbiBjc3IyZXh1X21zdGF0dXNfbWllX3VwX28gPSBjc3JfbXN0YXR1c191cGQgfCBjc3JfbWllX3VwZCB8IGVfbXJldDsKKworLy8gTmV3IFBDIG11bHRpcGxleGVyCitgaWZuZGVmIFNDUjFfTVRWRUNfTU9ERV9FTgorYXNzaWduIGNzcjJleHVfbmV3X3BjX28gPSAoZXh1MmNzcl9tcmV0X2luc3RyX2kgJiB+ZXh1MmNzcl90YWtlX2lycV9pKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBjc3JfbWVwYworICAgICAgICAgICAgICAgICAgICAgICAgOiB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX07CitgZWxzZSAvLyBTQ1IxX01UVkVDX01PREVfRU4KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKGV4dTJjc3JfbXJldF9pbnN0cl9pICYgfmV4dTJjc3JfdGFrZV9pcnFfaSkgYmVnaW4KKyAgICAgICAgY3NyMmV4dV9uZXdfcGNfbyAgPSBjc3JfbWVwYzsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoY3NyX210dmVjX21vZGVfdmVjdCkgYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKDEnYjEpCisgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19pOiBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUycoMCl9OworICAgICAgICAgICAgICAgIGNzcl9laXJxX3BuZF9lbiAgIDogY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9FWENfQ09ERV9JUlFfTV9FWFRFUk5BTCwgMidkMH07CisgICAgICAgICAgICAgICAgY3NyX3NpcnFfcG5kX2VuICAgOiBjc3IyZXh1X25ld19wY19vID0ge2Nzcl9tdHZlY19iYXNlLCBTQ1IxX0VYQ19DT0RFX0lSUV9NX1NPRlRXQVJFLCAyJ2QwfTsKKyAgICAgICAgICAgICAgICBjc3JfdGlycV9wbmRfZW4gICA6IGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfRVhDX0NPREVfSVJRX01fVElNRVIsIDInZDB9OworICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgIDogY3NyMmV4dV9uZXdfcGNfbyA9IHtjc3JfbXR2ZWNfYmFzZSwgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMnKDApfTsKKyAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gZGlyZWN0IG1vZGUKKyAgICAgICAgICAgIGNzcjJleHVfbmV3X3BjX28gPSB7Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX07CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCitgZW5kaWYgLy8gU0NSMV9NVFZFQ19NT0RFX0VOCisKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1IgPC0+IElQSUMgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gY3NyX2lwaWNfcmVxICAgICA9IGNzcjJpcGljX3JfcmVxX28gfCBjc3IyaXBpY193X3JlcV9vOworYXNzaWduIGNzcjJpcGljX2FkZHJfbyAgPSBjc3JfaXBpY19yZXEgICAgID8gZXh1MmNzcl9yd19hZGRyX2lbMjowXSA6ICcwOworYXNzaWduIGNzcjJpcGljX3dkYXRhX28gPSBjc3IyaXBpY193X3JlcV9vID8gZXh1MmNzcl93X2RhdGFfaSAgICAgICA6ICcwOworYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1IgPC0+IEhEVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjc3IyaGR1X3JlcV9vICAgPSBjc3JfaGR1X3JlcSAmIGV4dV9yZXFfbm9fZXhjOworYXNzaWduIGNzcjJoZHVfY21kX28gICA9IGV4dTJjc3Jfd19jbWRfaTsKK2Fzc2lnbiBjc3IyaGR1X2FkZHJfbyAgPSBleHUyY3NyX3J3X2FkZHJfaVtTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRILTE6MF07Cithc3NpZ24gY3NyMmhkdV93ZGF0YV9vID0gZXh1MmNzcl93X2RhdGFfaTsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9URFVfRU4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1IgPC0+IFREVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjc3IydGR1X3JlcV9vICAgPSBjc3JfYnJrbV9yZXEgJiBleHVfcmVxX25vX2V4YzsKK2Fzc2lnbiBjc3IydGR1X2NtZF9vICAgPSBleHUyY3NyX3dfY21kX2k7Cithc3NpZ24gY3NyMnRkdV9hZGRyX28gID0gZXh1MmNzcl9yd19hZGRyX2lbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF07Cithc3NpZ24gY3NyMnRkdV93ZGF0YV9vID0gZXh1MmNzcl93X2RhdGFfaTsKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCitgaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBYIGNoZWNrcworCitTQ1IxX1NWQV9DU1JfWENIRUNLX0NUUkwgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oe2V4dTJjc3Jfcl9yZXFfaSwgZXh1MmNzcl93X3JlcV9pLCBleHUyY3NyX3Rha2VfaXJxX2ksIGV4dTJjc3JfdGFrZV9leGNfaSwgZXh1MmNzcl9tcmV0X3VwZGF0ZV9pCitgaWZuZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisgICAgLCBleHUyY3NyX2luc3RyZXRfbm9fZXhjX2kKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorICAgIH0pCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB1bmtub3duIGNvbnRyb2wgdmFsdWVzIik7CisKK1NDUjFfU1ZBX0NTUl9YQ0hFQ0tfUkVBRCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBleHUyY3NyX3JfcmVxX2kgfC0+ICEkaXN1bmtub3duKHtleHUyY3NyX3J3X2FkZHJfaSwgY3NyMmV4dV9yX2RhdGFfbywgY3NyMmV4dV9yd19leGNfb30pCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB1bmtub3duIGNvbnRyb2wgdmFsdWVzIik7CisKK1NDUjFfU1ZBX0NTUl9YQ0hFQ0tfV1JJVEUgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgZXh1MmNzcl93X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7ZXh1MmNzcl9yd19hZGRyX2ksIGV4dTJjc3Jfd19jbWRfaSwgZXh1MmNzcl93X2RhdGFfaSwgY3NyMmV4dV9yd19leGNfb30pCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB1bmtub3duIGNvbnRyb2wgdmFsdWVzIik7CisKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KK1NDUjFfU1ZBX0NTUl9YQ0hFQ0tfUkVBRF9JUElDIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGNzcjJpcGljX3JfcmVxX28gfC0+ICEkaXN1bmtub3duKHtjc3IyaXBpY19hZGRyX28sIGlwaWMyY3NyX3JkYXRhX2l9KQorICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlcyIpOworCitTQ1IxX1NWQV9DU1JfWENIRUNLX1dSSVRFX0lQSUMgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgY3NyMmlwaWNfd19yZXFfbyB8LT4gISRpc3Vua25vd24oe2NzcjJpcGljX2FkZHJfbywgY3NyMmlwaWNfd2RhdGFfb30pCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiB1bmtub3duIGNvbnRyb2wgdmFsdWVzIik7CitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKKy8vIEJlaGF2aW9yIGNoZWNrcworCitTQ1IxX1NWQV9DU1JfTVJFVCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBlX21yZXQgfD0+ICgkc3RhYmxlKGNzcl9tZXBjX2ZmKSAmICRzdGFibGUoY3NyX210dmFsX2ZmKSkKKyAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IE1SRVQgd3JvbmcgYmVoYXZpb3IiKTsKKworU0NSMV9TVkFfQ1NSX01SRVRfSVJRIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIChleHUyY3NyX21yZXRfaW5zdHJfaSAmIGVfaXJxKQorICAgIHw9PiAoJHN0YWJsZShjc3JfbWVwY19mZikgJiAoZXh1MmNzcl9wY19jdXJyX2kgIT0gY3NyX21lcGMpKQorICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogTVJFVCtJUlEgd3JvbmcgYmVoYXZpb3IiKTsKKworU0NSMV9TVkFfQ1NSX0VYQ19JUlEgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgKGV4dTJjc3JfdGFrZV9leGNfaSAmIGV4dTJjc3JfdGFrZV9pcnFfaQorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgJiB+aGR1MmNzcl9ub19jb21taXRfaQorYGVuZGlmCisgICAgKSB8PT4KKyAgICAofmNzcl9tc3RhdHVzX21pZV9mZiAmICh+Y3NyX21jYXVzZV9pX2ZmKQorICAgICYgKGV4dTJjc3JfcGNfY3Vycl9pPT17Y3NyX210dmVjX2Jhc2UsIFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTJygwKX0pKQorICAgICkgZWxzZSAkZXJyb3IoIkNTUiBFcnJvcjogd3JvbmcgRVhDK0lSUSIpOworCitTQ1IxX1NWQV9DU1JfRVZFTlRTIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICRvbmVob3QwKHtlX2lycSwgZV9leGMsIGVfbXJldH0pCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBtb3JlIHRoYW4gb25lIGV2ZW50IGF0IGEgdGltZSIpOworCitTQ1IxX1NWQV9DU1JfUldfRVhDIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGNzcjJleHVfcndfZXhjX28gfC0+IChleHUyY3NyX3dfcmVxX2kgfCBleHUyY3NyX3JfcmVxX2kpCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBpbXBvc3NpYmxlIGV4Y2VwdGlvbiIpOworCitTQ1IxX1NWQV9DU1JfTVNUQVRVU19NSUVfVVAgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgY3NyMmV4dV9tc3RhdHVzX21pZV91cF9vIHw9PiB+Y3NyMmV4dV9tc3RhdHVzX21pZV91cF9vCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBjc3IyZXh1X21zdGF0dXNfbWllX3VwX28gY2FuIG9ubHkgYmUgaGlnaCBmb3Igb25lIG1jeWNsZSIpOworCisKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKKworU0NSMV9TVkFfQ1NSX0NZQ0xFX0lOQyA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQCgKK2BpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCituZWdlZGdlIGNsaworYGVsc2UgLy8gU0NSMV9DTEtDVFJMX0VOCituZWdlZGdlIGNsa19hbHdfb24KK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICApIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgKH58Y3NyX21jeWNsZV91cGQpIHw9PgorYGlmZGVmIFNDUjFfTUNPVU5URU5fRU4KKyAgICAoJHBhc3QoY3NyX21jb3VudGVuX2N5X2ZmKSA/IChjc3JfbWN5Y2xlID09ICRwYXN0KGNzcl9tY3ljbGUgKyAxJ2IxKSkgOiAkc3RhYmxlKGNzcl9tY3ljbGUpKQorYGVsc2UgLy9TQ1IxX01DT1VOVEVOX0VOCisgICAgKGNzcl9tY3ljbGUgPT0gJHBhc3QoY3NyX21jeWNsZSArIDEnYjEpKQorYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KKyAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IENZQ0xFIGluY3JlbWVudCB3cm9uZyBiZWhhdmlvciIpOworCitTQ1IxX1NWQV9DU1JfSU5TVFJFVF9JTkMgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgKGV4dTJjc3JfaW5zdHJldF9ub19leGNfaSAmIH58Y3NyX21pbnN0cmV0X3VwZCkgfD0+CitgaWZkZWYgU0NSMV9NQ09VTlRFTl9FTgorICAgICgkcGFzdChjc3JfbWNvdW50ZW5faXJfZmYpID8gKGNzcl9taW5zdHJldCA9PSAkcGFzdChjc3JfbWluc3RyZXQgKyAxJ2IxKSkgOiAkc3RhYmxlKGNzcl9taW5zdHJldCkpCitgZWxzZSAvL1NDUjFfTUNPVU5URU5fRU4KKyAgICAoY3NyX21pbnN0cmV0ID09ICRwYXN0KGNzcl9taW5zdHJldCArIDEnYjEpKQorYGVuZGlmIC8vIFNDUjFfTUNPVU5URU5fRU4KKyAgICApIGVsc2UgJGVycm9yKCJDU1IgRXJyb3I6IElOU1RSRVQgaW5jcmVtZW50IHdyb25nIGJlaGF2aW9yIik7CisKK1NDUjFfU1ZBX0NTUl9DWUNMRV9JTlNUUkVUX1VQIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIH4oJmNzcl9taW5zdHJldF91cGQgfCAmY3NyX21jeWNsZV91cGQpCisgICAgKSBlbHNlICRlcnJvcigiQ1NSIEVycm9yOiBJTlNUUkVUL0NZQ0xFIHVwIGlsbGVnYWwgdmFsdWUiKTsKKworYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfY3NyCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfZXh1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2V4dS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2V4dS5zdgpAQCAtMCwwICsxLDEwNjEgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9leHUuc3Y+CisvLy8gQGJyaWVmICAgICAgRXhlY3V0aW9uIFVuaXQgKEVYVSkKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIFBlcmZvcm1zIGluc3RydWN0aW9ucyBleGVjdXRpb246CisgLy8gICAtIFByZXZlbnRzIGluc3RydWN0aW9ucyBmcm9tIGV4ZWN1dGlvbiBpZiB0aGUgSEFSVCBpcyBpbiBXRkkgb3IgRGVidWcgSGFsdGVkCisgLy8gICAgIHN0YXRlCisgLy8gICAtIEZldGNoZXMgb3BlcmFuZHMgZm9yIElBTFUKKyAvLyAgIC0gQ2FsY3VsYXRlcyBvcGVyYXRpb24gcmVzdWx0cyB2aWEgSUFMVQorIC8vICAgLSBTdG9yZXMgSUFMVSByZXN1bHRzIGluIE1QUkYKKyAvLyAgIC0gUGVyZm9ybXMgTE9BRC9TVE9SRSBvcGVyYXRpb25zIHZpYSBMU1UKKyAvLyAtIEhhbmRsZXMgZXhjZXB0aW9uczoKKyAvLyAgIC0gR2VuZXJhdGVzIGV4Y2VwdGlvbiByZXF1ZXN0CisgLy8gICAtIEVuY29kZXMgZXhjZXB0aW9uIGNvZGUKKyAvLyAgIC0gQ2FsY3VsYXRlcyBleGNlcHRpb24gdHJhcCB2YWx1ZQorIC8vIC0gQ29udHJvbHMgV0ZJIGluc3RydWN0aW9uIGV4ZWN1dGlvbgorIC8vIC0gQ2FsY3VsYXRlcyBQQyB2YWx1ZToKKyAvLyAgIC0gSW5pdGlhbGl6ZXMgUEMgb24gcmVzZXQKKyAvLyAgIC0gU3RvcmVzIHRoZSBjdXJyZW50IFBDIHZhbHVlCisgLy8gICAtIENhbGN1bGF0ZXMgYSBOZXcgUEMgdmFsdWUgYW5kIGdlbmVyYXRlcyBhIE5ldyBQQyByZXF1ZXN0IHRvIElGVQorIC8vCisgLy8gU3RydWN0dXJlOgorIC8vIC0gSW5zdHJ1Y3Rpb24gcXVldWUKKyAvLyAtIEludGVnZXIgQXJpdGhtZXRpYyBMb2dpYyBVbml0IChJQUxVKQorIC8vIC0gRXhjZXB0aW9ucyBsb2dpYworIC8vIC0gV0ZJIGxvZ2ljCisgLy8gLSBQcm9ncmFtIENvdW50ZXIgbG9naWMKKyAvLyAtIExvYWQtU3RvcmUgVW5pdCAoTFNVKQorIC8vIC0gRVhVIHN0YXR1cyBsb2dpYworIC8vIC0gRVhVIDwtPiBNUFJGIGkvZgorIC8vIC0gRVhVIDwtPiBDU1IgaS9mCisgLy8gLSBFWFUgPC0+IFREVSBpL2YKKyAvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKK2BpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKK2BpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCitgaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyBgaW5jbHVkZSAic2NyMV9oZHUuc3ZoIgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorIGBpbmNsdWRlICJzY3IxX3RkdS5zdmgiCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworbW9kdWxlIHNjcjFfcGlwZV9leHUgKAorICAgIC8vIENvbW1vbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIEVYVSByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdhdGVkIEVYVSBjbG9jaworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2Fsd19vbiwgICAgICAgICAgICAgICAgIC8vIE5vdC1nYXRlZCBFWFUgY2xvY2sKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19waXBlX2VuLCAgICAgICAgICAgICAgICAvLyBFWFUgY2xvY2sgZW5hYmxlZCBmbGFnCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKKyAgICAvLyBFWFUgPC0+IElEVSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfcmVxX2ksICAgICAgICAgICAgICAvLyBSZXF1ZXN0IGZvcm0gSURVIHRvIEVYVQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHlfbywgICAgICAgICAgICAgIC8vIEVYVSByZWFkeSBmb3IgbmV3IGRhdGEgZnJvbSBJRFUKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9leHVfY21kX3MgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX2ksICAgICAgICAgICAgICAvLyBFWFUgY29tbWFuZAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX2ksICAgICAgICAgIC8vIENsb2NrIGdhdGluZyBvbiByczFfYWRkciBmaWVsZAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX2ksICAgICAgICAgIC8vIENsb2NrIGdhdGluZyBvbiByczJfYWRkciBmaWVsZAorYGlmbmRlZiBTQ1IxX05PX0VYRV9TVEFHRQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfaSwgICAgICAgICAgIC8vIENsb2NrIGdhdGluZyBvbiByZF9hZGRyIGZpZWxkCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1faSwgICAgICAgICAgLy8gQ2xvY2sgZ2F0aW5nIG9uIGltbSBmaWVsZAorYGVuZGlmIC8vIFNDUjFfTk9fRVhFX1NUQUdFCisKKyAgICAvLyBFWFUgPC0+IE1QUkYgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yczFfYWRkcl9vLCAgICAgICAgLy8gTVBSRiByczEgcmVhZCBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBtcHJmMmV4dV9yczFfZGF0YV9pLCAgICAgICAgLy8gTVBSRiByczEgcmVhZCBkYXRhCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yczJfYWRkcl9vLCAgICAgICAgLy8gTVBSRiByczIgcmVhZCBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBtcHJmMmV4dV9yczJfZGF0YV9pLCAgICAgICAgLy8gTVBSRiByczIgcmVhZCBkYXRhCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUybXByZl93X3JlcV9vLCAgICAgICAgICAgLy8gTVBSRiB3cml0ZSByZXF1ZXN0CisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICBleHUybXByZl9yZF9hZGRyX28sICAgICAgICAgLy8gTVBSRiByZCB3cml0ZSBhZGRyZXNzCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUybXByZl9yZF9kYXRhX28sICAgICAgICAgLy8gTVBSRiByZCB3cml0ZSBkYXRhCisKKyAgICAvLyBFWFUgPC0+IENTUiByZWFkL3dyaXRlIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSAgICAgZXh1MmNzcl9yd19hZGRyX28sICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFkZHJlc3MKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3Jfcl9yZXFfbywgICAgICAgICAgICAvLyBDU1IgcmVhZCByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBjc3IyZXh1X3JfZGF0YV9pLCAgICAgICAgICAgLy8gQ1NSIHJlYWQgZGF0YQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9vLCAgICAgICAgICAgIC8vIENTUiB3cml0ZSByZXF1ZXN0CisgICAgb3V0cHV0ICB0eXBlX3NjcjFfY3NyX2NtZF9zZWxfZSAgICAgICAgICAgICBleHUyY3NyX3dfY21kX28sICAgICAgICAgICAgLy8gQ1NSIHdyaXRlIGNvbW1hbmQKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dTJjc3Jfd19kYXRhX28sICAgICAgICAgICAvLyBDU1Igd3JpdGUgZGF0YQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yd19leGNfaSwgICAgICAgICAgIC8vIENTUiByZWFkL3dyaXRlIGFjY2VzcyBleGNlcHRpb24KKworICAgIC8vIEVYVSA8LT4gQ1NSIGV2ZW50cyBpbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfdGFrZV9pcnFfbywgICAgICAgICAvLyBUYWtlIElSUSB0cmFwCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfZXhjX28sICAgICAgICAgLy8gVGFrZSBleGNlcHRpb24gdHJhcAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9tcmV0X3VwZGF0ZV9vLCAgICAgIC8vIE1SRVQgdXBkYXRlIENTUgorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl9tcmV0X2luc3RyX28sICAgICAgIC8vIE1SRVQgaW5zdHJ1Y3Rpb24KKyAgICBvdXRwdXQgIHR5cGVfc2NyMV9leGNfY29kZV9lICAgICAgICAgICAgICAgIGV4dTJjc3JfZXhjX2NvZGVfbywgICAgICAgICAvLyBFeGNlcHRpb24gY29kZSAoc2VlIHNjcjFfYXJjaF90eXBlcy5zdmgpCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUyY3NyX3RyYXBfdmFsX28sICAgICAgICAgLy8gVHJhcCB2YWx1ZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgY3NyMmV4dV9uZXdfcGNfaSwgICAgICAgICAgIC8vIEV4Y2VwdGlvbi9JUlEvTVJFVCBuZXcgUEMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfaXJxX2ksICAgICAgICAgICAgICAvLyBJUlEgcmVxdWVzdAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9pcF9pZV9pLCAgICAgICAgICAgIC8vIFNvbWUgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9tc3RhdHVzX21pZV91cF9pLCAgIC8vIE1TVEFUVVMgb3IgTUlFIHVwZGF0ZSBpbiB0aGUgY3VycmVudCBjeWNsZQorCisgICAgLy8gRVhVIDwtPiBETUVNIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmRtZW1fcmVxX28sICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QKKyAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgIGV4dTJkbWVtX2NtZF9vLCAgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBjb21tYW5kCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICBleHUyZG1lbV93aWR0aF9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd2lkdGgKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgIGV4dTJkbWVtX2FkZHJfbywgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSBhZGRyZXNzCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBleHUyZG1lbV93ZGF0YV9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgd3JpdGUgZGF0YQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJleHVfcmVxX2Fja19pLCAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlcXVlc3QgYWNrbm93bGVkZ2UKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW0yZXh1X3JkYXRhX2ksICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZWFkIGRhdGEKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgIGRtZW0yZXh1X3Jlc3BfaSwgICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSByZXNwb25zZQorCisgICAgLy8gRVhVIGNvbnRyb2wKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX2V4Y19yZXFfbywgICAgICAgICAvLyBFeGNlcHRpb24gb24gbGFzdCBpbnN0cnVjdGlvbgorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnBpcGVfYnJrcHRfbywgICAgICAgICAgIC8vIFNvZnR3YXJlIEJyZWFrcG9pbnQgKEVCUkVBSykKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX2luaXRfcGNfbywgICAgICAgICAvLyBSZXNldCBleGl0CisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV93ZmlfcnVuMmhhbHRfbywgICAgLy8gVHJhbnNpdGlvbiB0byBXRkkgaGFsdGVkIHN0YXRlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUycGlwZV9pbnN0cmV0X28sICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aCBvciB3aXRob3V0IGV4Y2VwdGlvbikKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfaW5zdHJldF9ub19leGNfbywgICAvLyBJbnN0cnVjdGlvbiByZXRpcmVkICh3aXRob3V0IGV4Y2VwdGlvbikKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX2V4dV9idXN5X28sICAgICAgICAvLyBFWFUgYnVzeQorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAvLyBFWFUgPC0+IEhEVSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfbm9fY29tbWl0X2ksICAgICAgICAvLyBGb3JiaWQgaW5zdHJ1Y3Rpb24gY29tbWl0bWVudAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9pcnFfZHNibF9pLCAgICAgICAgIC8vIERpc2FibGUgSVJRCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X3BjX2Fkdm10X2RzYmxfaSwgICAgLy8gRm9yYmlkIFBDIGFkdmFuY2VtZW50CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2Rtb2RlX3NzdGVwX2VuX2ksICAgLy8gRW5hYmxlIHNpbmdsZS1zdGVwCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X3BidWZfZmV0Y2hfaSwgICAgICAgLy8gVGFrZSBpbnN0cnVjdGlvbnMgZnJvbSBQcm9ncmFtIEJ1ZmZlcgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfaGFsdGVkX2ksICAgICAgIC8vIERlYnVnIGhhbHRlZCBzdGF0ZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfcnVuMmhhbHRfaSwgICAgIC8vIFRyYW5zaXRpb24gdG8gZGVidWcgaGFsdGVkIHN0YXRlCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9pLCAgICAgLy8gVHJhbnNpdGlvbiB0byBydW4gc3RhdGUKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX3J1bl9zdGFydF9pLCAgICAvLyBGaXJzdCBjeWNsZSBvZiBydW4gc3RhdGUKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGhkdTJleHVfZGJnX25ld19wY19pLCAgICAgICAvLyBOZXcgUEMgYXMgc3RhcnRpbmcgcG9pbnQgZm9yIEhBUlQgUmVzdW1lCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGlmZGVmIFNDUjFfVERVX0VOCisgICAgLy8gRVhVIDwtPiBURFUgaW50ZXJmYWNlCisgICAgb3V0cHV0IHR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICBleHUydGR1X2ltb25fbywgICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbW9uaXRvcgorICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgdGR1MmV4dV9pYnJrcHRfbWF0Y2hfaSwgICAgIC8vIEluc3RydWN0aW9uIGJyZWFrcG9pbnQocykgbWF0Y2gKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJleHVfaWJya3B0X2V4Y19yZXFfaSwgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50IGV4Y2VwdGlvbgorICAgIG91dHB1dCB0eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3MgICAgICAgICAgICAgbHN1MnRkdV9kbW9uX28sICAgICAgICAgICAgIC8vIERhdGEgbW9uaXRvcgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pLCAgIC8vIEluc3RydWN0aW9uIGJyZWFrcG9pbnQgZXhjZXB0aW9uCisgICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX1REVV9NVFJJR19OVU0tMTowXSAgICAgICB0ZHUybHN1X2RicmtwdF9tYXRjaF9pLCAgICAgLy8gRGF0YSBicmVha3BvaW50KHMpIG1hdGNoCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUybHN1X2RicmtwdF9leGNfcmVxX2ksICAgLy8gRGF0YSBicmVha3BvaW50IGV4Y2VwdGlvbgorICAgIG91dHB1dCBsb2dpYyBbU0NSMV9URFVfQUxMVFJJR19OVU0tMTowXSAgICAgZXh1MnRkdV9pYnJrcHRfcmV0X28sICAgICAgIC8vIEluc3RydWN0aW9uIHdpdGggYnJlYWtwb2ludCBmbGFnIHJldGlyZQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmhkdV9pYnJrcHRfaHdfbywgICAgICAgIC8vIEhhcmR3YXJlIGJyZWFrcG9pbnQgb24gY3VycmVudCBpbnN0cnVjdGlvbgorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKyAgICAvLyBQQyBpbnRlcmZhY2UKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJwaXBlX3dmaV9oYWx0ZWRfbywgICAgICAvLyBXRkkgaGFsdGVkIHN0YXRlCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUycGlwZV9wY19jdXJyX28sICAgICAgICAgLy8gQ3VycmVudCBQQworICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MmNzcl9wY19uZXh0X28sICAgICAgICAgIC8vIE5leHQgUEMKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X3JlcV9vLCAgICAgICAvLyBOZXcgUEMgcmVxdWVzdAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1MmlmdV9wY19uZXdfbyAgICAgICAgICAgIC8vIE5ldyBQQyBkYXRhCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9jYWxwYXJhbSBTQ1IxX0pVTVBfTUFTSyA9IGBTQ1IxX1hMRU4naEZGRkZfRkZGRTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0eXBlZGVmIGVudW0gbG9naWMgeworICAgIFNDUjFfQ1NSX0lOSVQsCisgICAgU0NSMV9DU1JfUkRZCit9IHNjcjFfY3NyX2FjY2Vzc19lOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSW5zdHJ1Y3Rpb24gcXVldWUgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV92ZDsKK3R5cGVfc2NyMV9leHVfY21kX3MgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV9iYXJyaWVyOworCitgaWZkZWYgU0NSMV9EQkdfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19ydW5fc3RhcnRfbnBidWY7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV9lbjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGV4dV9pbGxlZ2FsX2luc3RyOworCitgaWZuZGVmIFNDUjFfTk9fRVhFX1NUQUdFCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfZmY7CisKKy8vIEVYVSBxdWV1ZSB2YWxpZCBmbGFnIHJlZ2lzdGVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9xdWV1ZV92ZF91cGQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfdmRfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfcXVldWVfdmRfbmV4dDsKK2BlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQorCisvLyBJQUxVIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgaWZkZWYgU0NSMV9SVk1fRVhUCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1X3JkeTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHVfdmQ7CitgZW5kaWYgLy8gU0NSMV9SVk1fRVhUCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X21haW5fb3AxOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9tYWluX29wMjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfbWFpbl9yZXM7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpYWx1X2FkZHJfb3AxOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaWFsdV9hZGRyX29wMjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGlhbHVfYWRkcl9yZXM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1X2NtcDsKKworLy8gRXhjZXB0aW9ucyBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2V4Y19yZXE7CitgaWZkZWYgU0NSMV9EQkdfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9leGNfcmVxX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2V4Y19yZXFfbmV4dDsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgordHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgZXhjX2NvZGU7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleGNfdHJhcF92YWw7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9mYXVsdF9ydmlfaGk7CisKKy8vIFdGSSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV0ZJIGNvbnRyb2wgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRfY29uZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9ydW5fcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX2hhbHRfcmVxOworCisvLyBXRkkgUnVuIFN0YXJ0IHJlZ2lzdGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfcnVuX3N0YXJ0X2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX3J1bl9zdGFydF9uZXh0OworCisvLyBXRkkgaGFsdGVkIHJlZ2lzdGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkX3VwZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9oYWx0ZWRfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkX25leHQ7CisKKy8vIFBDIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BjX3Y7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BjOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgaW5jX3BjOworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfdGFrZW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYl90YWtlbjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIGpiX25ld19wYzsKK2BpZm5kZWYgU0NSMV9SVkNfRVhUCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYl9taXNhbGlnbjsKK2BlbmRpZgorCisvLyBDdXJyZW50IFBDIHJlZ2lzdGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY19jdXJyX3VwZDsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIHBjX2N1cnJfZmY7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBwY19jdXJyX25leHQ7CisKKy8vIExTVSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1X3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdV9yZHk7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBsc3VfbF9kYXRhOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1X2V4Y19yZXE7Cit0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICBsc3VfZXhjX2NvZGU7CisKKy8vIEVYVSBzdGF0dXMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9yZHk7CisKKy8vIE1QUkYgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmZfcnMxX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wcmZfcnMyX3JlcTsKKworbG9naWMgICBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgbXByZl9yczFfYWRkcjsKK2xvZ2ljICAgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgIG1wcmZfcnMyX2FkZHI7CisKKy8vIENTUiBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ1NSIGFjY2VzcyByZWdpc3Rlcgorc2NyMV9jc3JfYWNjZXNzX2UgICAgICAgICAgICAgICAgICAgY3NyX2FjY2Vzc19mZjsKK3NjcjFfY3NyX2FjY2Vzc19lICAgICAgICAgICAgICAgICAgIGNzcl9hY2Nlc3NfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hY2Nlc3NfaW5pdDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc3RydWN0aW9uIGV4ZWN1dGlvbiBxdWV1ZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gSW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHF1ZXVlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIEVYVSBxdWV1ZSBjb250cm9sIGxvZ2ljCisgLy8gLSBFWFUgcXVldWUgdmFsaWQgZmxhZyByZWdpc3RlcgorIC8vIC0gRVhVIHF1ZXVlIHJlZ2lzdGVyCisgLy8gLSBFWFUgcXVldWUgc3RhdHVzIGxvZ2ljCisvLworCitgaWZkZWYgU0NSMV9EQkdfRU4KK2Fzc2lnbiBkYmdfcnVuX3N0YXJ0X25wYnVmID0gaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X2kgJiB+aGR1MmV4dV9wYnVmX2ZldGNoX2k7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGlmbmRlZiBTQ1IxX05PX0VYRV9TVEFHRQorCisvLyBFWFUgcXVldWUgY29udHJvbCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGV4dV9xdWV1ZV9iYXJyaWVyID0gd2ZpX2hhbHRlZF9mZiB8IHdmaV9oYWx0X3JlcSB8IHdmaV9ydW5fc3RhcnRfZmYKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGR1MmV4dV9kYmdfaGFsdGVkX2kgIHwgaGR1MmV4dV9kYmdfcnVuMmhhbHRfaQorICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCis7CisKK2Fzc2lnbiBleHVfcXVldWVfZW4gPSBleHUyaWR1X3JkeV9vICYgaWR1MmV4dV9yZXFfaTsKKworLy8gRVhVIHF1ZXVlIHZhbGlkIGZsYWcgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBleHVfcXVldWVfdmRfdXBkID0gZXh1X3F1ZXVlX2JhcnJpZXIgfCBleHVfcmR5OworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBleHVfcXVldWVfdmRfZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBpZiAoZXh1X3F1ZXVlX3ZkX3VwZCkgYmVnaW4KKyAgICAgICAgZXh1X3F1ZXVlX3ZkX2ZmIDw9IGV4dV9xdWV1ZV92ZF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBleHVfcXVldWVfdmRfbmV4dCA9IH5leHVfcXVldWVfYmFycmllciAmIGlkdTJleHVfcmVxX2kgJiB+ZXh1MmlmdV9wY19uZXdfcmVxX287Cithc3NpZ24gZXh1X3F1ZXVlX3ZkICAgICAgPSBleHVfcXVldWVfdmRfZmY7CisKKy8vIEVYVSBxdWV1ZSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGV4dV9xdWV1ZV9lbikgYmVnaW4KKyAgICAgICAgZXh1X3F1ZXVlLmluc3RyX3J2YyAgICAgIDw9IGlkdTJleHVfY21kX2kuaW5zdHJfcnZjOworICAgICAgICBleHVfcXVldWUuaWFsdV9vcCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pYWx1X29wOworICAgICAgICBleHVfcXVldWUuaWFsdV9jbWQgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5pYWx1X2NtZDsKKyAgICAgICAgZXh1X3F1ZXVlLnN1bTJfb3AgICAgICAgIDw9IGlkdTJleHVfY21kX2kuc3VtMl9vcDsKKyAgICAgICAgZXh1X3F1ZXVlLmxzdV9jbWQgICAgICAgIDw9IGlkdTJleHVfY21kX2kubHN1X2NtZDsKKyAgICAgICAgZXh1X3F1ZXVlLmNzcl9vcCAgICAgICAgIDw9IGlkdTJleHVfY21kX2kuY3NyX29wOworICAgICAgICBleHVfcXVldWUuY3NyX2NtZCAgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5jc3JfY21kOworICAgICAgICBleHVfcXVldWUucmRfd2Jfc2VsICAgICAgPD0gaWR1MmV4dV9jbWRfaS5yZF93Yl9zZWw7CisgICAgICAgIGV4dV9xdWV1ZS5qdW1wX3JlcSAgICAgICA8PSBpZHUyZXh1X2NtZF9pLmp1bXBfcmVxOworICAgICAgICBleHVfcXVldWUuYnJhbmNoX3JlcSAgICAgPD0gaWR1MmV4dV9jbWRfaS5icmFuY2hfcmVxOworICAgICAgICBleHVfcXVldWUubXJldF9yZXEgICAgICAgPD0gaWR1MmV4dV9jbWRfaS5tcmV0X3JlcTsKKyAgICAgICAgZXh1X3F1ZXVlLmZlbmNlaV9yZXEgICAgIDw9IGlkdTJleHVfY21kX2kuZmVuY2VpX3JlcTsKKyAgICAgICAgZXh1X3F1ZXVlLndmaV9yZXEgICAgICAgIDw9IGlkdTJleHVfY21kX2kud2ZpX3JlcTsKKyAgICAgICAgZXh1X3F1ZXVlLmV4Y19yZXEgICAgICAgIDw9IGlkdTJleHVfY21kX2kuZXhjX3JlcTsKKyAgICAgICAgZXh1X3F1ZXVlLmV4Y19jb2RlICAgICAgIDw9IGlkdTJleHVfY21kX2kuZXhjX2NvZGU7CisgICAgICAgIGlkdTJleHVfdXNlX3JzMV9mZiAgICAgICA8PSBpZHUyZXh1X3VzZV9yczFfaTsKKyAgICAgICAgaWR1MmV4dV91c2VfcnMyX2ZmICAgICAgIDw9IGlkdTJleHVfdXNlX3JzMl9pOworICAgICAgICBpZiAoaWR1MmV4dV91c2VfcnMxX2kpIGJlZ2luCisgICAgICAgICAgICBleHVfcXVldWUucnMxX2FkZHIgICA8PSBpZHUyZXh1X2NtZF9pLnJzMV9hZGRyOworICAgICAgICBlbmQKKyAgICAgICAgaWYgKGlkdTJleHVfdXNlX3JzMl9pKSBiZWdpbgorICAgICAgICAgICAgZXh1X3F1ZXVlLnJzMl9hZGRyICAgPD0gaWR1MmV4dV9jbWRfaS5yczJfYWRkcjsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChpZHUyZXh1X3VzZV9yZF9pKSAgYmVnaW4KKyAgICAgICAgICAgIGV4dV9xdWV1ZS5yZF9hZGRyICAgIDw9IGlkdTJleHVfY21kX2kucmRfYWRkcjsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChpZHUyZXh1X3VzZV9pbW1faSkgYmVnaW4KKyAgICAgICAgICAgIGV4dV9xdWV1ZS5pbW0gICAgICAgIDw9IGlkdTJleHVfY21kX2kuaW1tOworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitgZWxzZSAvLyB+U0NSMV9OT19FWEVfU1RBR0UKKworYXNzaWduIGV4dV9xdWV1ZV9iYXJyaWVyID0gd2ZpX2hhbHRlZF9mZiB8IHdmaV9ydW5fc3RhcnRfZmYKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGR1MmV4dV9kYmdfaGFsdGVkX2kgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCis7Cithc3NpZ24gZXh1X3F1ZXVlX3ZkICA9IGlkdTJleHVfcmVxX2kgJiB+ZXh1X3F1ZXVlX2JhcnJpZXI7Cithc3NpZ24gZXh1X3F1ZXVlICAgICA9IGlkdTJleHVfY21kX2k7CisKK2BlbmRpZiAvLyB+U0NSMV9OT19FWEVfU1RBR0UKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVnZXIgQXJpdGhtZXRpYyBMb2dpYyBVbml0IChJQUxVKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIEZ1bmN0aW9uYWxpdHk6CisgLy8gLSBQZXJmb3JtcyBhZGRpdGlvbi9zdWJ0cmFjdGlvbiBhbmQgYXJpdGhtZXRpYyBhbmQgYnJhbmNoIGNvbXBhcmlzb25zCisgLy8gLSBQZXJmb3JtcyBsb2dpY2FsIG9wZXJhdGlvbnMgKEFORChJKSwgT1IoSSksIFhPUihJKSkKKyAvLyAtIFBlcmZvcm1zIGFkZHJlc3MgY2FsY3VsYXRpb24gZm9yIGJyYW5jaCwganVtcCwgRE1FTSBsb2FkIGFuZCBzdG9yZSBhbmQgQVVJUEMKKyAvLyAgIGluc3RydWN0aW9ucworIC8vIC0gUGVyZm9ybXMgc2hpZnQgb3BlcmF0aW9ucworIC8vIC0gUGVyZm9ybXMgTVVML0RJViBvcGVyYXRpb25zCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIElBTFUgbWFpbiBvcGVyYW5kcyBmZXRjaAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmIFNDUjFfUlZNX0VYVAorYXNzaWduIGlhbHVfdmQgID0gZXh1X3F1ZXVlX3ZkICYgKGV4dV9xdWV1ZS5pYWx1X2NtZCAhPSBTQ1IxX0lBTFVfQ01EX05PTkUpCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAmIH50ZHUyZXh1X2licmtwdF9leGNfcmVxX2kKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgIDsKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKworYWx3YXlzX2NvbWIgYmVnaW4KK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyAgICBpZiAofmlhbHVfdmQpIGJlZ2luCisgICAgICAgIGlhbHVfbWFpbl9vcDEgPSAnMDsKKyAgICAgICAgaWFsdV9tYWluX29wMiA9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCitgZW5kaWYgLy8gU0NSMV9SVk1fRVhUCisgICAgICAgIGlmIChleHVfcXVldWUuaWFsdV9vcCA9PSBTQ1IxX0lBTFVfT1BfUkVHX1JFRykgYmVnaW4KKyAgICAgICAgICAgIGlhbHVfbWFpbl9vcDEgPSBtcHJmMmV4dV9yczFfZGF0YV9pOworICAgICAgICAgICAgaWFsdV9tYWluX29wMiA9IG1wcmYyZXh1X3JzMl9kYXRhX2k7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICBpYWx1X21haW5fb3AxID0gbXByZjJleHVfcnMxX2RhdGFfaTsKKyAgICAgICAgICAgIGlhbHVfbWFpbl9vcDIgPSBleHVfcXVldWUuaW1tOworICAgICAgICBlbmQKK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyAgICBlbmQKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKK2VuZAorCisvLyBJQUxVIGFkZHJlc3Mgb3BlcmFuZHMgZmV0Y2gKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKGV4dV9xdWV1ZS5zdW0yX29wID09IFNDUjFfU1VNMl9PUF9SRUdfSU1NKSBiZWdpbgorICAgICAgICBpYWx1X2FkZHJfb3AxID0gbXByZjJleHVfcnMxX2RhdGFfaTsKKyAgICAgICAgaWFsdV9hZGRyX29wMiA9IGV4dV9xdWV1ZS5pbW07CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWFsdV9hZGRyX29wMSA9IHBjX2N1cnJfZmY7CisgICAgICAgIGlhbHVfYWRkcl9vcDIgPSBleHVfcXVldWUuaW1tOworICAgIGVuZAorZW5kCisKKy8vIElBTFUgbW9kdWxlIGluc3RhbnRpYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NjcjFfcGlwZV9pYWx1IGlfaWFsdSgKK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyAgICAvLyBDb21tb24KKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICApLAorICAgIC5leHUyaWFsdV9ydm1fY21kX3ZkX2kgICAgICAoaWFsdV92ZCAgICAgICAgICAgKSwKKyAgICAuaWFsdTJleHVfcnZtX3Jlc19yZHlfbyAgICAgKGlhbHVfcmR5ICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9SVk1fRVhUCisKKyAgICAvLyBJQUxVCisgICAgLmV4dTJpYWx1X21haW5fb3AxX2kgICAgICAgIChpYWx1X21haW5fb3AxICAgICApLAorICAgIC5leHUyaWFsdV9tYWluX29wMl9pICAgICAgICAoaWFsdV9tYWluX29wMiAgICAgKSwKKyAgICAuZXh1MmlhbHVfY21kX2kgICAgICAgICAgICAgKGV4dV9xdWV1ZS5pYWx1X2NtZCksCisgICAgLmlhbHUyZXh1X21haW5fcmVzX28gICAgICAgIChpYWx1X21haW5fcmVzICAgICApLAorICAgIC5pYWx1MmV4dV9jbXBfcmVzX28gICAgICAgICAoaWFsdV9jbXAgICAgICAgICAgKSwKKworICAgIC8vIEFkZHJlc3MgYWRkZXIgc2lnbmFscworICAgIC5leHUyaWFsdV9hZGRyX29wMV9pICAgICAgICAoaWFsdV9hZGRyX29wMSAgICAgKSwKKyAgICAuZXh1MmlhbHVfYWRkcl9vcDJfaSAgICAgICAgKGlhbHVfYWRkcl9vcDIgICAgICksCisgICAgLmlhbHUyZXh1X2FkZHJfcmVzX28gICAgICAgIChpYWx1X2FkZHJfcmVzICAgICApCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhjZXB0aW9ucyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gRXhjZXB0aW9ucyBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBFeGNlcHRpb24gcmVxdWVzdCBsb2dpYworIC8vIC0gRXhjZXB0aW9uIGNvZGUgZW5jb2RlcgorIC8vIC0gRXhjZXB0aW9uIHRyYXAgdmFsdWUgbXVsdGlwbGV4ZXIKKyAvLworLy8KKworYGlmbmRlZiBTQ1IxX1JWQ19FWFQKK2Fzc2lnbiBqYl9taXNhbGlnbiAgPSBleHVfcXVldWVfdmQgICYgamJfdGFrZW4gJiB8amJfbmV3X3BjWzE6MF07CitgZW5kaWYgLy8gflNDUjFfUlZDX0VYVAorCisvLyBFeGNlcHRpb24gcmVxdWVzdAorYXNzaWduIGV4dV9leGNfcmVxICA9IGV4dV9xdWV1ZV92ZCAmIChleHVfcXVldWUuZXhjX3JlcSB8IGxzdV9leGNfcmVxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3NyMmV4dV9yd19leGNfaQorYGlmbmRlZiBTQ1IxX1JWQ19FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBqYl9taXNhbGlnbgorYGVuZGlmIC8vIH5TQ1IxX1JWQ19FWFQKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dTJoZHVfaWJya3B0X2h3X28KK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisvLyBFWFUgZXhjZXB0aW9uIHJlcXVlc3QgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBleHVfZXhjX3JlcV9mZiA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGV4dV9leGNfcmVxX2ZmIDw9IGV4dV9leGNfcmVxX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIGV4dV9leGNfcmVxX25leHQgPSBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9pID8gMSdiMCA6IGV4dV9leGNfcmVxOworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKy8vIEV4Y2VwdGlvbiBjb2RlIGVuY29kZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoMSdiMSkKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICBleHUyaGR1X2licmtwdF9od19vOiBleGNfY29kZSA9IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDsKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorICAgICAgICBleHVfcXVldWUuZXhjX3JlcSAgOiBleGNfY29kZSA9IGV4dV9xdWV1ZS5leGNfY29kZTsKKyAgICAgICAgbHN1X2V4Y19yZXEgICAgICAgIDogZXhjX2NvZGUgPSBsc3VfZXhjX2NvZGU7CisgICAgICAgIGNzcjJleHVfcndfZXhjX2kgICA6IGV4Y19jb2RlID0gU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSOworYGlmbmRlZiBTQ1IxX1JWQ19FWFQKKyAgICAgICAgamJfbWlzYWxpZ24gICAgICAgIDogZXhjX2NvZGUgPSBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOOworYGVuZGlmIC8vIH5TQ1IxX1JWQ19FWFQKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDogZXhjX2NvZGUgPSBTQ1IxX0VYQ19DT0RFX0VDQUxMX007CisgICAgZW5kY2FzZSAvLyAxJ2IxCitlbmQKKworLy8gRXhjZXB0aW9uIHRyYXAgdmFsdWUgbXVsdGlwbGV4ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBpbnN0cl9mYXVsdF9ydmlfaGkgPSBleHVfcXVldWUuaW5zdHJfcnZjOworYXNzaWduIGV4dV9pbGxlZ2FsX2luc3RyID0ge2V4dTJjc3JfcndfYWRkcl9vLCAgICAgICAgICAvLyBDU1IgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUnKGV4dV9xdWV1ZS5yczFfYWRkciksICAgICAvLyByczEgLyB6aW1tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3F1ZXVlLmltbVsxNDoxMl0sICAgICAgIC8vIGZ1bmN0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUnKGV4dV9xdWV1ZS5yZF9hZGRyKSwgICAgICAvLyByZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX1NZU1RFTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lOU1RSX1JWSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworLy8gSWYgSW5zdHJ1Y3Rpb24gQWNjZXNzIEZhdWx0IG9jY3VycmVkIG9uIGhpZ2ggcGFydCBvZiBSVkkgaW5zdHJ1Y3Rpb24gdHJhcAorLy8gdmFsdWUgaXMgc2V0IHRvIHBvaW50IG9uIHRoZSBoaWdoIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uIChpbmNfcGM9cGMrMikKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoZXhjX2NvZGUpCitgaWZuZGVmIFNDUjFfUlZDX0VYVAorICAgICAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOICAgIDogZXhjX3RyYXBfdmFsID0gamJfbmV3X3BjOworYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAorICAgICAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX0FDQ0VTU19GQVVMVDogZXhjX3RyYXBfdmFsID0gaW5zdHJfZmF1bHRfcnZpX2hpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbmNfcGMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBjX2N1cnJfZmY7CitgaWZkZWYgU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCisgICAgICAgIFNDUjFfRVhDX0NPREVfSUxMRUdBTF9JTlNUUiAgICAgOiBleGNfdHJhcF92YWwgPSBleHVfcXVldWUuZXhjX3JlcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXh1X3F1ZXVlLmltbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXh1X2lsbGVnYWxfaW5zdHI7CitgZWxzZSAvLyBTQ1IxX01UVkFMX0lMTEVHQUxfSU5TVFJfRU4KKyAgICAgICAgU0NSMV9FWENfQ09ERV9JTExFR0FMX0lOU1RSICAgICA6IGV4Y190cmFwX3ZhbCA9ICcwOworYGVuZGlmIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgorYGlmZGVmIFNDUjFfVERVX0VOCisgICAgICAgIFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVDogYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKDEnYjEpCisgICAgICAgICAgICAgICAgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9pOiBleGNfdHJhcF92YWwgPSBwY19jdXJyX2ZmOworICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaTogZXhjX3RyYXBfdmFsID0gaWFsdV9hZGRyX3JlczsKKyAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICA6IGV4Y190cmFwX3ZhbCA9ICcwOworICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICBlbmQKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorICAgICAgICBTQ1IxX0VYQ19DT0RFX0xEX0FERFJfTUlTQUxJR04sCisgICAgICAgIFNDUjFfRVhDX0NPREVfTERfQUNDRVNTX0ZBVUxULAorICAgICAgICBTQ1IxX0VYQ19DT0RFX1NUX0FERFJfTUlTQUxJR04sCisgICAgICAgIFNDUjFfRVhDX0NPREVfU1RfQUNDRVNTX0ZBVUxUICAgOiBleGNfdHJhcF92YWwgPSBpYWx1X2FkZHJfcmVzOworICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhjX3RyYXBfdmFsID0gJzA7CisgICAgZW5kY2FzZSAvLyBleGNfY29kZQorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXRkkgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFdhaXQgZm9yIGludGVycnVwdCAoV0ZJKSBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBXRkkgY29udHJvbCBsb2dpYworIC8vIC0gV0ZJIFJ1biBTdGFydCByZWdpc3RlcgorIC8vIC0gV0ZJIEhhbHRlZCBmbGFnIHJlZ2lzdGVyCisgLy8gLSBXRkkgc3RhdHVzIHNpZ25hbHMKKy8vCisKKy8vIFdGSSBjb250cm9sIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gd2ZpX2hhbHRfY29uZCA9IH5jc3IyZXh1X2lwX2llX2kKKyAgICAgICAgICAgICAgICAgICAgICYgKChleHVfcXVldWVfdmQgJiBleHVfcXVldWUud2ZpX3JlcSkgfCB3ZmlfcnVuX3N0YXJ0X2ZmKQorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X25vX2NvbW1pdF9pICYgfmhkdTJleHVfZG1vZGVfc3N0ZXBfZW5faSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9pCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiB3ZmlfaGFsdF9yZXEgID0gfndmaV9oYWx0ZWRfZmYgJiB3ZmlfaGFsdF9jb25kOworCisvLyBIQVJUIHdpbGwgZXhpdCBXRkkgaGFsdGVkIHN0YXRlIGlmIHRoZSBldmVudCB0aGF0IGNhdXNlcyB0aGUgSEFSVCB0byByZXN1bWUKKy8vIGV4ZWN1dGlvbiBvY2N1cnMgZXZlbiBpZiBpdCBkb2Vzbid0IGNhdXNlIGFuIGludGVycnVwdCB0byBiZSB0YWtlbgorYXNzaWduIHdmaV9ydW5fcmVxICAgPSB3ZmlfaGFsdGVkX2ZmICAmIChjc3IyZXh1X2lwX2llX2kKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhkdTJleHVfZGJnX2hhbHQycnVuX2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisvLyBXRkkgUnVuIFN0YXJ0IHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgorYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCitgZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrX2Fsd19vbikgYmVnaW4KK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICB3ZmlfcnVuX3N0YXJ0X2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgd2ZpX3J1bl9zdGFydF9mZiA8PSB3ZmlfcnVuX3N0YXJ0X25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHdmaV9ydW5fc3RhcnRfbmV4dCA9IHdmaV9oYWx0ZWRfZmYgJiBjc3IyZXh1X2lwX2llX2kgJiB+ZXh1MmNzcl90YWtlX2lycV9vOworCisvLyBXRkkgaGFsdGVkIGZsYWcgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiB3ZmlfaGFsdGVkX3VwZCA9IHdmaV9oYWx0X3JlcSB8IHdmaV9ydW5fcmVxOworCitgaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgorYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCitgZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrX2Fsd19vbikgYmVnaW4KK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICB3ZmlfaGFsdGVkX2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKHdmaV9oYWx0ZWRfdXBkKSBiZWdpbgorICAgICAgICB3ZmlfaGFsdGVkX2ZmIDw9IHdmaV9oYWx0ZWRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gd2ZpX2hhbHRlZF9uZXh0ID0gd2ZpX2hhbHRfcmVxIHwgfndmaV9ydW5fcmVxOworCisvLyBXRkkgc3RhdHVzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBleHUycGlwZV93ZmlfcnVuMmhhbHRfbyA9IHdmaV9oYWx0X3JlcTsKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KK2Fzc2lnbiBleHUycGlwZV93ZmlfaGFsdGVkX28gICA9IHdmaV9oYWx0ZWRfZmY7CitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm9ncmFtIENvdW50ZXIgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFBDIGxvZ2ljIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIFBDIGluaXRpYWxpemF0aW9uIGxvZ2ljCisgLy8gLSBDdXJyZW50IFBDIHJlZ2lzdGVyCisgLy8gLSBOZXcgUEMgbXVsdGlwbGV4ZXIKKworLy8gUEMgaW5pdGlhbGl6YXRpb24gbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHZW5lcmF0ZXMgYSBOZXcgUEMgcmVxdWVzdCB0byBzZXQgUEMgdG8gcmVzZXQgdmFsdWUKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgaW5pdF9wY192IDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmICh+JmluaXRfcGNfdikgYmVnaW4KKyAgICAgICAgICAgIGluaXRfcGNfdiA8PSB7aW5pdF9wY192WzI6MF0sIDEnYjF9OworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCithc3NpZ24gaW5pdF9wYyA9IH5pbml0X3BjX3ZbM10gJiBpbml0X3BjX3ZbMl07CisKKy8vIEN1cnJlbnQgUEMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBwY19jdXJyX3VwZCA9ICgoZXh1MnBpcGVfaW5zdHJldF9vIHwgZXh1MmNzcl90YWtlX2lycV9vCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICB8IGRiZ19ydW5fc3RhcnRfbnBidWYpICYgKCB+aGR1MmV4dV9wY19hZHZtdF9kc2JsX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9ub19jb21taXRfaQorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgKSk7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHBjX2N1cnJfZmYgPD0gU0NSMV9SU1RfVkVDVE9SOworICAgIGVuZCBlbHNlIGlmIChwY19jdXJyX3VwZCkgYmVnaW4KKyAgICAgICAgcGNfY3Vycl9mZiA8PSBwY19jdXJyX25leHQ7CisgICAgZW5kCitlbmQKKworYGlmZGVmIFNDUjFfUlZDX0VYVAorYXNzaWduIGluY19wYyA9IHBjX2N1cnJfZmYgKyAoZXh1X3F1ZXVlLmluc3RyX3J2YyA/IGBTQ1IxX1hMRU4nZDIgOiBgU0NSMV9YTEVOJ2Q0KTsKK2BlbHNlIC8vIH5TQ1IxX1JWQ19FWFQKK2Fzc2lnbiBpbmNfcGMgPSBwY19jdXJyX2ZmICsgYFNDUjFfWExFTidkNDsKK2BlbmRpZiAvLyB+U0NSMV9SVkNfRVhUCisKK2Fzc2lnbiBwY19jdXJyX25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfbyAgICAgICAgPyBleHUyaWZ1X3BjX25ld19vCisgICAgICAgICAgICAgICAgICAgIDogKGluY19wY1s2XSBeIHBjX2N1cnJfZmZbNl0pID8gaW5jX3BjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge3BjX2N1cnJfZmZbYFNDUjFfWExFTi0xOjZdLCBpbmNfcGNbNTowXX07CisKKy8vIE5ldyBQQyBtdWx0aXBsZXhlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorICAgICAgICBpbml0X3BjICAgICAgICAgICAgIDogZXh1MmlmdV9wY19uZXdfbyA9IFNDUjFfUlNUX1ZFQ1RPUjsKKyAgICAgICAgZXh1MmNzcl90YWtlX2V4Y19vLAorICAgICAgICBleHUyY3NyX3Rha2VfaXJxX28sCisgICAgICAgIGV4dTJjc3JfbXJldF9pbnN0cl9vOiBleHUyaWZ1X3BjX25ld19vID0gY3NyMmV4dV9uZXdfcGNfaTsKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICBkYmdfcnVuX3N0YXJ0X25wYnVmIDogZXh1MmlmdV9wY19uZXdfbyA9IGhkdTJleHVfZGJnX25ld19wY19pOworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgIHdmaV9ydW5fc3RhcnRfZmYgICAgOiBleHUyaWZ1X3BjX25ld19vID0gcGNfY3Vycl9mZjsKKyAgICAgICAgZXh1X3F1ZXVlLmZlbmNlaV9yZXE6IGV4dTJpZnVfcGNfbmV3X28gPSBpbmNfcGM7CisgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgOiBleHUyaWZ1X3BjX25ld19vID0gaWFsdV9hZGRyX3JlcyAmIFNDUjFfSlVNUF9NQVNLOworICAgIGVuZGNhc2UKK2VuZAorCithc3NpZ24gZXh1MmlmdV9wY19uZXdfcmVxX28gPSBpbml0X3BjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleHUyY3NyX3Rha2VfaXJxX28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dTJjc3JfdGFrZV9leGNfbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJjc3JfbXJldF9pbnN0cl9vICYgfmNzcjJleHVfbXN0YXR1c19taWVfdXBfaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChleHVfcXVldWVfdmQgJiBleHVfcXVldWUuZmVuY2VpX3JlcSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICh3ZmlfcnVuX3N0YXJ0X2ZmCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjbGtfcGlwZV9lbgorYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGJnX3J1bl9zdGFydF9ucGJ1ZgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1X3F1ZXVlX3ZkICYgamJfdGFrZW4pOworCisvLyBKdW1wL2JyYW5jaCBzaWduYWxzCithc3NpZ24gYnJhbmNoX3Rha2VuID0gZXh1X3F1ZXVlLmJyYW5jaF9yZXEgJiBpYWx1X2NtcDsKK2Fzc2lnbiBqYl90YWtlbiAgICAgPSBleHVfcXVldWUuanVtcF9yZXEgfCBicmFuY2hfdGFrZW47Cithc3NpZ24gamJfbmV3X3BjICAgID0gaWFsdV9hZGRyX3JlcyAmIFNDUjFfSlVNUF9NQVNLOworCisvLyBQQyB0byBiZSBsb2FkZWQgb24gTVJFVCBmcm9tIGludGVycnVwdCB0cmFwCithc3NpZ24gZXh1MmNzcl9wY19uZXh0X28gID0gfmV4dV9xdWV1ZV92ZCA/IHBjX2N1cnJfZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqYl90YWtlbiAgICAgID8gamJfbmV3X3BjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGluY19wYzsKK2Fzc2lnbiBleHUycGlwZV9wY19jdXJyX28gPSBwY19jdXJyX2ZmOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9hZC9TdG9yZSBVbml0IChMU1UpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIFBlcmZvcm1zIGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMgaW4gRGF0YSBNZW1vcnkKKyAvLyAtIEdlbmVyYXRlcyBETUVNIGFkZHJlc3MgbWlzYWxpZ24gYW5kIGFjY2VzcyBmYXVsdCBleGNlcHRpb25zCisgLy8gLSBQYXNzZXMgRE1FTSBvcGVyYXRpb25zIGluZm9ybWF0aW9uIHRvIFREVSBhbmQgZ2VuZXJhdGVzIExTVSBicmVha3BvaW50IGV4Y2VwdGlvbgorIC8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gbHN1X3JlcSAgPSAoKGV4dV9xdWV1ZS5sc3VfY21kICE9IFNDUjFfTFNVX0NNRF9OT05FKSAmIGV4dV9xdWV1ZV92ZCk7CisKK3NjcjFfcGlwZV9sc3UgaV9sc3UoCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIEVYVSA8LT4gTFNVIGludGVyZmFjZQorICAgIC5leHUybHN1X3JlcV9pICAgICAgICAgICAgICAobHN1X3JlcSAgICAgICAgICAgICAgICAgKSwgICAgICAgLy8gUmVxdWVzdCB0byBMU1UKKyAgICAuZXh1MmxzdV9jbWRfaSAgICAgICAgICAgICAgKGV4dV9xdWV1ZS5sc3VfY21kICAgICAgICksICAgICAgIC8vIExTVSBjb21tYW5kCisgICAgLmV4dTJsc3VfYWRkcl9pICAgICAgICAgICAgIChpYWx1X2FkZHJfcmVzICAgICAgICAgICApLCAgICAgICAvLyBETUVNIGFkZHJlc3MKKyAgICAuZXh1MmxzdV9zZGF0YV9pICAgICAgICAgICAgKG1wcmYyZXh1X3JzMl9kYXRhX2kgICAgICksICAgICAgIC8vIERhdGEgZm9yIHN0b3JlIHRvIERNRU0KKyAgICAubHN1MmV4dV9yZHlfbyAgICAgICAgICAgICAgKGxzdV9yZHkgICAgICAgICAgICAgICAgICksICAgICAgIC8vIExTVSByZWFkeQorICAgIC5sc3UyZXh1X2xkYXRhX28gICAgICAgICAgICAobHN1X2xfZGF0YSAgICAgICAgICAgICAgKSwgICAgICAgLy8gTG9hZGVkIGRhdGEgZm9ybSBETUVNCisgICAgLmxzdTJleHVfZXhjX28gICAgICAgICAgICAgIChsc3VfZXhjX3JlcSAgICAgICAgICAgICApLCAgICAgICAvLyBMU1UgZXhjZXB0aW9uCisgICAgLmxzdTJleHVfZXhjX2NvZGVfbyAgICAgICAgIChsc3VfZXhjX2NvZGUgICAgICAgICAgICApLCAgICAgICAvLyBMU1UgZXhjZXB0aW9uIGNvZGUKKworYGlmZGVmIFNDUjFfVERVX0VOCisgICAgLy8gVERVIDwtPiBMU1UgaW50ZXJmYWNlCisgICAgLmxzdTJ0ZHVfZG1vbl9vICAgICAgICAgICAgIChsc3UydGR1X2Rtb25fbyAgICAgICAgICApLAorICAgIC50ZHUybHN1X2licmtwdF9leGNfcmVxX2kgICAodGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pKSwKKyAgICAudGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pICAgKHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaSksCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQorICAgIC5sc3UyZG1lbV9yZXFfbyAgICAgICAgICAgICAoZXh1MmRtZW1fcmVxX28gICAgICAgICAgKSwgICAgICAgLy8gRE1FTSByZXF1ZXN0CisgICAgLmxzdTJkbWVtX2NtZF9vICAgICAgICAgICAgIChleHUyZG1lbV9jbWRfbyAgICAgICAgICApLCAgICAgICAvLyBETUVNIGNvbW1hbmQKKyAgICAubHN1MmRtZW1fd2lkdGhfbyAgICAgICAgICAgKGV4dTJkbWVtX3dpZHRoX28gICAgICAgICksICAgICAgIC8vIERNRU0gd2lkdGgKKyAgICAubHN1MmRtZW1fYWRkcl9vICAgICAgICAgICAgKGV4dTJkbWVtX2FkZHJfbyAgICAgICAgICksICAgICAgIC8vIERNRU0gYWRkcmVzcworICAgIC5sc3UyZG1lbV93ZGF0YV9vICAgICAgICAgICAoZXh1MmRtZW1fd2RhdGFfbyAgICAgICAgKSwgICAgICAgLy8gRE1FTSB3cml0ZSBkYXRhCisgICAgLmRtZW0ybHN1X3JlcV9hY2tfaSAgICAgICAgIChkbWVtMmV4dV9yZXFfYWNrX2kgICAgICApLCAgICAgICAvLyBETUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKKyAgICAuZG1lbTJsc3VfcmRhdGFfaSAgICAgICAgICAgKGRtZW0yZXh1X3JkYXRhX2kgICAgICAgICksICAgICAgIC8vIERNRU0gcmVhZCBkYXRhCisgICAgLmRtZW0ybHN1X3Jlc3BfaSAgICAgICAgICAgIChkbWVtMmV4dV9yZXNwX2kgICAgICAgICApICAgICAgICAvLyBETUVNIHJlc3BvbnNlCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRVhVIHN0YXR1cyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRVhVIHJlYWR5IGZsYWcKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgbHN1X3JlcSAgICAgICAgICAgICAgICAgOiBleHVfcmR5ID0gbHN1X3JkeSB8IGxzdV9leGNfcmVxOworYGlmZGVmIFNDUjFfUlZNX0VYVAorICAgICAgICBpYWx1X3ZkICAgICAgICAgICAgICAgICA6IGV4dV9yZHkgPSBpYWx1X3JkeTsKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKyAgICAgICAgY3NyMmV4dV9tc3RhdHVzX21pZV91cF9pOiBleHVfcmR5ID0gMSdiMDsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBleHVfcmR5ID0gMSdiMTsKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIGV4dTJwaXBlX2luaXRfcGNfbyAgICAgICA9IGluaXRfcGM7Cithc3NpZ24gZXh1MmlkdV9yZHlfbyAgICAgICAgICAgID0gZXh1X3JkeSAmIH5leHVfcXVldWVfYmFycmllcjsKK2Fzc2lnbiBleHUycGlwZV9leHVfYnVzeV9vICAgICAgPSBleHVfcXVldWVfdmQgJiB+ZXh1X3JkeTsKK2Fzc2lnbiBleHUycGlwZV9pbnN0cmV0X28gICAgICAgPSBleHVfcXVldWVfdmQgJiBleHVfcmR5OworYXNzaWduIGV4dTJjc3JfaW5zdHJldF9ub19leGNfbyA9IGV4dTJwaXBlX2luc3RyZXRfbyAmIH5leHVfZXhjX3JlcTsKKworLy8gRXhjZXB0aW9ucworYGlmZGVmIFNDUjFfREJHX0VOCithc3NpZ24gZXh1MnBpcGVfZXhjX3JlcV9vICA9IGV4dV9xdWV1ZV92ZCA/IGV4dV9leGNfcmVxIDogZXh1X2V4Y19yZXFfZmY7CitgZWxzZSAvLyBTQ1IxX0RCR19FTgorYXNzaWduIGV4dTJwaXBlX2V4Y19yZXFfbyAgPSBleHVfZXhjX3JlcTsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisvLyBCcmVha3BvaW50cworYXNzaWduIGV4dTJwaXBlX2Jya3B0X28gICAgPSBleHVfcXVldWVfdmQgJiAoZXh1X3F1ZXVlLmV4Y19jb2RlID09IFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVCk7CitgaWZkZWYgU0NSMV9URFVfRU4KK2Fzc2lnbiBleHUyaGR1X2licmtwdF9od19vID0gdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9pIHwgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFWFUgPC0+IE1QUkYgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBPcGVyYW5kcyBmZXRjaGluZyBzdGFnZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmICBTQ1IxX05PX0VYRV9TVEFHRQorYXNzaWduIG1wcmZfcnMxX3JlcSA9IGV4dV9xdWV1ZV92ZCAmIGlkdTJleHVfdXNlX3JzMV9pOworYXNzaWduIG1wcmZfcnMyX3JlcSA9IGV4dV9xdWV1ZV92ZCAmIGlkdTJleHVfdXNlX3JzMl9pOworYGVsc2UgLy8gU0NSMV9OT19FWEVfU1RBR0UKKyBgaWZkZWYgIFNDUjFfTVBSRl9SQU0KK2Fzc2lnbiBtcHJmX3JzMV9yZXEgPSBleHVfcXVldWVfZW4KKyAgICAgICAgICAgICAgICAgICAgPyAoZXh1X3F1ZXVlX3ZkX25leHQgJiBpZHUyZXh1X3VzZV9yczFfaSkKKyAgICAgICAgICAgICAgICAgICAgOiAoZXh1X3F1ZXVlX3ZkICAgICAgJiBpZHUyZXh1X3VzZV9yczFfZmYpOworYXNzaWduIG1wcmZfcnMyX3JlcSA9IGV4dV9xdWV1ZV9lbgorICAgICAgICAgICAgICAgICAgICA/IChleHVfcXVldWVfdmRfbmV4dCAmIGlkdTJleHVfdXNlX3JzMl9pKQorICAgICAgICAgICAgICAgICAgICA6IChleHVfcXVldWVfdmQgICAgICAmIGlkdTJleHVfdXNlX3JzMl9mZik7CisgYGVsc2UgLy8gU0NSMV9NUFJGX1JBTQorYXNzaWduIG1wcmZfcnMxX3JlcSA9IGV4dV9xdWV1ZV92ZCAmIGlkdTJleHVfdXNlX3JzMV9mZjsKK2Fzc2lnbiBtcHJmX3JzMl9yZXEgPSBleHVfcXVldWVfdmQgJiBpZHUyZXh1X3VzZV9yczJfZmY7CisgYGVuZGlmIC8vIFNDUjFfTVBSRl9SQU0KK2BlbmRpZiAvLyBTQ1IxX05PX0VYRV9TVEFHRQorCisvLyBJZiBleHVfcXVldWUgaXNuJ3QgZW5hYmxlZCB3ZSBuZWVkIHByZXZpb3VzIGFkZHJlc3NlcyBhbmQgdXNhZ2UgZmxhZ3MgYmVjYXVzZQorLy8gUkFNIGJsb2NrcyByZWFkIG9wZXJhdGlvbiBpcyBTWU5DSFJPTk9VUworYGlmZGVmIFNDUjFfTVBSRl9SQU0KK2Fzc2lnbiBtcHJmX3JzMV9hZGRyID0gZXh1X3F1ZXVlX2VuID8gaWR1MmV4dV9jbWRfaS5yczFfYWRkciA6IGV4dV9xdWV1ZS5yczFfYWRkcjsKK2Fzc2lnbiBtcHJmX3JzMl9hZGRyID0gZXh1X3F1ZXVlX2VuID8gaWR1MmV4dV9jbWRfaS5yczJfYWRkciA6IGV4dV9xdWV1ZS5yczJfYWRkcjsKK2BlbHNlIC8vIFNDUjFfTVBSRl9SQU0KK2Fzc2lnbiBtcHJmX3JzMV9hZGRyID0gZXh1X3F1ZXVlLnJzMV9hZGRyOworYXNzaWduIG1wcmZfcnMyX2FkZHIgPSBleHVfcXVldWUucnMyX2FkZHI7CitgZW5kaWYgLy8gU0NSMV9NUFJGX1JBTQorCithc3NpZ24gZXh1Mm1wcmZfcnMxX2FkZHJfbyA9IG1wcmZfcnMxX3JlcSA/IGBTQ1IxX01QUkZfQVdJRFRIJyhtcHJmX3JzMV9hZGRyKSA6ICcwOworYXNzaWduIGV4dTJtcHJmX3JzMl9hZGRyX28gPSBtcHJmX3JzMl9yZXEgPyBgU0NSMV9NUFJGX0FXSURUSCcobXByZl9yczJfYWRkcikgOiAnMDsKKworLy8gV3JpdGUgYmFjayBzdGFnZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGV4dTJtcHJmX3dfcmVxX28gICA9IChleHVfcXVldWUucmRfd2Jfc2VsICE9IFNDUjFfUkRfV0JfTk9ORSkgJiBleHVfcXVldWVfdmQgJiB+ZXh1X2V4Y19yZXEKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X25vX2NvbW1pdF9pCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoKGV4dV9xdWV1ZS5yZF93Yl9zZWwgPT0gU0NSMV9SRF9XQl9DU1IpID8gY3NyX2FjY2Vzc19pbml0IDogZXh1X3JkeSk7CisKK2Fzc2lnbiBleHUybXByZl9yZF9hZGRyX28gPSBgU0NSMV9NUFJGX0FXSURUSCcoZXh1X3F1ZXVlLnJkX2FkZHIpOworCisvLyBNUlBGIFJEIGRhdGEgbXVsdGlwbGV4ZXIKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoZXh1X3F1ZXVlLnJkX3diX3NlbCkKKyAgICAgICAgU0NSMV9SRF9XQl9TVU0yICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGlhbHVfYWRkcl9yZXM7CisgICAgICAgIFNDUjFfUkRfV0JfSU1NICAgOiBleHUybXByZl9yZF9kYXRhX28gPSBleHVfcXVldWUuaW1tOworICAgICAgICBTQ1IxX1JEX1dCX0lOQ19QQzogZXh1Mm1wcmZfcmRfZGF0YV9vID0gaW5jX3BjOworICAgICAgICBTQ1IxX1JEX1dCX0xTVSAgIDogZXh1Mm1wcmZfcmRfZGF0YV9vID0gbHN1X2xfZGF0YTsKKyAgICAgICAgU0NSMV9SRF9XQl9DU1IgICA6IGV4dTJtcHJmX3JkX2RhdGFfbyA9IGNzcjJleHVfcl9kYXRhX2k7CisgICAgICAgIGRlZmF1bHQgICAgICAgICAgOiBleHUybXByZl9yZF9kYXRhX28gPSBpYWx1X21haW5fcmVzOworICAgIGVuZGNhc2UKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRVhVIDwtPiBDU1IgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBFWFUgPC0+IENTUiBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgorIC8vIC0gQ1NSIHdyaXRlL3JlYWQgaW50ZXJmYWNlCisgLy8gLSBDU1IgYWNjZXNzIEZTTQorIC8vIC0gQ1NSIGV2ZW50cyBpbnRlcmZhY2U6CisgLy8gICAtIEV4Y2VwdGlvbnMgc2lnbmFscworIC8vICAgLSBJbnRlcnJ1cHRzIHNpZ25hbHMKKyAvLyAgIC0gTVJFVCBzaWduYWxzCisvLworCisvLyBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDU1Igd3JpdGUvcmVhZCByZXF1ZXN0IHNpZ25hbHMgY2FsY3VsYXRpb24KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKH5leHVfcXVldWVfdmQKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgIHwgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9pCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICApIGJlZ2luCisgICAgICAgIGV4dTJjc3Jfcl9yZXFfbyA9IDEnYjA7CisgICAgICAgIGV4dTJjc3Jfd19yZXFfbyA9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY2FzZSAoZXh1X3F1ZXVlLmNzcl9jbWQpCisgICAgICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEUgIDogYmVnaW4KKyAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28gPSB8ZXh1X3F1ZXVlLnJkX2FkZHI7CisgICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcV9vID0gY3NyX2FjY2Vzc19pbml0OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0NTUl9DTURfU0VULAorICAgICAgICAgICAgU0NSMV9DU1JfQ01EX0NMRUFSICA6IGJlZ2luCisgICAgICAgICAgICAgICAgZXh1MmNzcl9yX3JlcV9vID0gMSdiMTsKKyAgICAgICAgICAgICAgICBleHUyY3NyX3dfcmVxX28gPSB8ZXh1X3F1ZXVlLnJzMV9hZGRyICYgY3NyX2FjY2Vzc19pbml0OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxX28gPSAxJ2IwOworICAgICAgICAgICAgICAgIGV4dTJjc3Jfd19yZXFfbyA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKK2Fzc2lnbiBleHUyY3NyX3dfY21kX28gICA9IGV4dV9xdWV1ZS5jc3JfY21kOworYXNzaWduIGV4dTJjc3JfcndfYWRkcl9vID0gZXh1X3F1ZXVlLmltbVtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF07Cithc3NpZ24gZXh1MmNzcl93X2RhdGFfbyAgPSAoZXh1X3F1ZXVlLmNzcl9vcCA9PSBTQ1IxX0NTUl9PUF9SRUcpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBtcHJmMmV4dV9yczFfZGF0YV9pCisgICAgICAgICAgICAgICAgICAgICAgICAgOiB7JzAsIGV4dV9xdWV1ZS5yczFfYWRkcn07IC8vIHppbW0KKworCisvLyBDU1IgYWNjZXNzIEZTTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX2FjY2Vzc19mZiA8PSBTQ1IxX0NTUl9JTklUOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNzcl9hY2Nlc3NfZmYgPD0gY3NyX2FjY2Vzc19uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBjc3JfYWNjZXNzX25leHQgPSAoY3NyX2FjY2Vzc19pbml0ICYgY3NyMmV4dV9tc3RhdHVzX21pZV91cF9pKQorICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfQ1NSX1JEWQorICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfQ1NSX0lOSVQ7CisKK2Fzc2lnbiBjc3JfYWNjZXNzX2luaXQgPSAoY3NyX2FjY2Vzc19mZiA9PSBTQ1IxX0NTUl9JTklUKTsKKworLy8gQ1NSIGV2ZW50cyBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEV4Y2VwdGlvbnMgc2lnbmFscworYXNzaWduIGV4dTJjc3JfdGFrZV9leGNfbyA9IGV4dV9leGNfcmVxCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9kYmdfaGFsdGVkX2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICA7Cithc3NpZ24gZXh1MmNzcl9leGNfY29kZV9vID0gZXhjX2NvZGU7Cithc3NpZ24gZXh1MmNzcl90cmFwX3ZhbF9vID0gZXhjX3RyYXBfdmFsOworCisvLyBJbnRlcnJ1cHRzIHNpZ25hbHMKK2Fzc2lnbiBleHUyY3NyX3Rha2VfaXJxX28gPSBjc3IyZXh1X2lycV9pICYgfmV4dTJwaXBlX2V4dV9idXN5X28KK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5oZHUyZXh1X2lycV9kc2JsX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9kYmdfaGFsdGVkX2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNsa19waXBlX2VuCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gTVJFVCBzaWduYWxzCisvLyBNUkVUIGluc3RydWN0aW9uIGZsYWcKK2Fzc2lnbiBleHUyY3NyX21yZXRfaW5zdHJfbyAgPSBleHVfcXVldWVfdmQgJiBleHVfcXVldWUubXJldF9yZXEKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH50ZHUyZXh1X2licmtwdF9leGNfcmVxX2kKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfmhkdTJleHVfZGJnX2hhbHRlZF9pCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworYXNzaWduIGV4dTJjc3JfbXJldF91cGRhdGVfbyA9IGV4dTJjc3JfbXJldF9pbnN0cl9vICYgY3NyX2FjY2Vzc19pbml0OworCitgaWZkZWYgU0NSMV9URFVfRU4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFWFUgPC0+IFREVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEluc3RydWN0aW9uIG1vbml0b3IKK2Fzc2lnbiBleHUydGR1X2ltb25fby52ZCAgICA9IGV4dV9xdWV1ZV92ZDsKK2Fzc2lnbiBleHUydGR1X2ltb25fby5yZXEgICA9IGV4dTJwaXBlX2luc3RyZXRfbzsKK2Fzc2lnbiBleHUydGR1X2ltb25fby5hZGRyICA9IHBjX2N1cnJfZmY7CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZXh1MnRkdV9pYnJrcHRfcmV0X28gPSAnMDsKKyAgICBpZiAoZXh1X3F1ZXVlX3ZkKSBiZWdpbgorICAgICAgICBleHUydGR1X2licmtwdF9yZXRfbyA9IHRkdTJleHVfaWJya3B0X21hdGNoX2k7CisgICAgICAgIGlmIChsc3VfcmVxKSBiZWdpbgorICAgICAgICAgICAgZXh1MnRkdV9pYnJrcHRfcmV0X29bU0NSMV9URFVfTVRSSUdfTlVNLTE6MF0gfD0gdGR1MmxzdV9kYnJrcHRfbWF0Y2hfaTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYWNlbG9nIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICB1cGRhdGVfcGM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3BjX2VuOworCithc3NpZ24gdXBkYXRlX3BjX2VuID0gKGluaXRfcGMgfCBleHUycGlwZV9pbnN0cmV0X28gfCBleHUyY3NyX3Rha2VfaXJxX28pCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgJiB+aGR1MmV4dV9wY19hZHZtdF9kc2JsX2kgJiB+aGR1MmV4dV9ub19jb21taXRfaQorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiB1cGRhdGVfcGMgICAgPSBleHUyaWZ1X3BjX25ld19yZXFfbyA/IGV4dTJpZnVfcGNfbmV3X28gOiBpbmNfcGM7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gWCBjaGVja3MKKworU0NSMV9TVkFfRVhVX1hDSEVDS19DVFJMIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHtpZHUyZXh1X3JlcV9pLCBjc3IyZXh1X2lycV9pLCBjc3IyZXh1X2lwX2llX2ksIGxzdV9yZXEsIGxzdV9yZHksIGV4dV9leGNfcmVxfSkKKyAgICApIGVsc2UgJGVycm9yKCJFWFUgRXJyb3I6IHVua25vd24gY29udHJvbCB2YWx1ZXMiKTsKKworU0NSMV9TVkFfRVhVX1hDSEVDS19RVUVVRSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBpZHUyZXh1X3JlcV9pIHwtPiAhJGlzdW5rbm93bihpZHUyZXh1X2NtZF9pKQorICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogdW5rbm93biB2YWx1ZXMgaW4gcXVldWUiKTsKKworU0NSMV9TVkFfRVhVX1hDSEVDS19DU1JfUkRBVEEgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgZXh1MmNzcl9yX3JlcV9vIHwtPiAhJGlzdW5rbm93bih7Y3NyMmV4dV9yX2RhdGFfaSwgY3NyMmV4dV9yd19leGNfaX0pCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiB1bmtub3duIHZhbHVlcyBmcm9tIENTUiIpOworCisvLyBCZWhhdmlvciBjaGVja3MKKworU0NSMV9TVkFfRVhVX09ORUhPVCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAkb25laG90MCh7ZXh1X3F1ZXVlLmp1bXBfcmVxLCBleHVfcXVldWUuYnJhbmNoX3JlcSwgbHN1X3JlcX0pCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGNvbnRyb2wgc2lnbmFscyIpOworCitTQ1IxX1NWQV9FWFVfT05FSE9UX0VYQyA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBleHVfcXVldWVfdmQgfC0+CisgICAgJG9uZWhvdDAoe2V4dV9xdWV1ZS5leGNfcmVxLCBsc3VfZXhjX3JlcSwgY3NyMmV4dV9yd19leGNfaQorYGlmbmRlZiBTQ1IxX1JWQ19FWFQKKyAgICAsIGpiX21pc2FsaWduCitgZW5kaWYKKyAgICB9KQorICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogZXhjZXB0aW9ucyAkb25laG90MCBmYWlsZWQiKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfcGlwZV9leHUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9oZHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZjQyMWIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2CkBAIC0wLDAgKzEsOTA0IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9oZHUuc3Y+CisvLy8gQGJyaWVmICAgICAgSEFSVCBEZWJ1ZyBVbml0IChIRFUpCisvLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIENvbnRyb2xzIEhBUlQgc3RhdGUgKFJVTiwgRGVidWcgUlVOLCBEZWJ1ZyBIQUxURUQpCisgLy8gLSBTZXR1cHMgRGVidWcgTW9kZSBleGVjdXRpb24KKyAvLyAtIFByb3ZpZGVzIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBEZWJ1ZyBNb2RlIGV4ZWN1dGlvbgorIC8vIC0gUHJvdmlkZXMgUHJvZ3JhbSBCdWZmZXIgZnVuY3Rpb25hbGl0eSAoYSBmZXcgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGlvbiB3aGlsZQorIC8vICAgaW4gRGVidWcgTW9kZSkKKyAvLyAtIFByb3ZpZGVzIGFjY2VzcyB0byBEZWJ1ZyBDU1JzCisgLy8KKyAvLyBTdHJ1Y3R1cmU6CisgLy8gLSBEZWJ1ZyBzdGF0ZSBGU00KKyAvLyAtIEhBUlQgQ29udHJvbCBsb2dpYworIC8vIC0gSEFSVCBTdGF0dXMgbG9naWMKKyAvLyAtIFByb2dyYW0gQnVmZmVyCisgLy8gLSBEZWJ1ZyBDU1JzCisgLy8gLSBIRFUgPC0+IERNIGludGVyZmFjZQorIC8vIC0gSERVIDwtPiBFWFUgaW50ZXJmYWNlCisgLy8gLSBIRFUgPC0+IElGVSBpbnRlcmZhY2UKKyAvLyAtIEhEVSA8LT4gQ1NSIGludGVyZmFjZQorIC8vIC0gSERVIDwtPiBURFUgaW50ZXJmYWNlCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgorYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKK2BpbmNsdWRlICJzY3IxX2hkdS5zdmgiCisKK21vZHVsZSBzY3IxX3BpcGVfaGR1ICMocGFyYW1ldGVyIEhBUlRfUEJVRl9JTlNUUl9SRUdPVVRfRU4gPSAxJ2IxKSAoCisgICAgLy8gQ29tbW9uIHNpZ25hbHMKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIEhEVSByZXNldAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gSERVIGNsb2NrCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbiwgICAgICAgICAgICAgICAgICAgICAvLyBIRFUgY2xvY2sgZW5hYmxlCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19waXBlX2VuLCAgICAgICAgICAgICAgICAvLyBQaXBlbGluZSBjbG9jayBlbmFibGUKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfcmRjX3FsZnlfaSwgICAgICAgIC8vIFBpcGVsaW5lIFJEQyBxdWFsaWZpZXIKKworICAgIC8vIEhEVSA8LT4gQ1NSIGkvZgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3JlcV9pLCAgICAgICAgICAgICAgLy8gQ1NSIGkvZiByZXF1ZXN0CisgICAgaW5wdXQgIHR5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgIGNzcjJoZHVfY21kX2ksICAgICAgICAgICAgICAvLyBDU1IgaS9mIGNvbW1hbmQKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXSAgICAgY3NyMmhkdV9hZGRyX2ksICAgICAgICAgICAgIC8vIENTUiBpL2YgYWRkcmVzcworICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3dkYXRhX2ksICAgICAgICAgICAgLy8gQ1NSIGkvZiB3cml0ZSBkYXRhCisgICAgb3V0cHV0IHR5cGVfc2NyMV9jc3JfcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmVzcF9vLCAgICAgICAgICAgICAvLyBDU1IgaS9mIHJlc3BvbnNlCisgICAgb3V0cHV0IGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmRhdGFfbywgICAgICAgICAgICAvLyBDU1IgaS9mIHJlYWQgZGF0YQorCisgICAgLy8gSERVIDwtPiBETSBpL2YKKyAgICAvLyBIQVJUIFJ1biBDb250cm9sIGkvZgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJoZHVfY21kX3JlcV9pLCAgICAgICAgICAgLy8gRE0tSEFSVCBDb21tYW5kIHJlcXVlc3QKKyAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgZG0yaGR1X2NtZF9pLCAgICAgICAgICAgICAgIC8vIERNLUhBUlQgQ29tbWFuZAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbywgICAgICAgICAgLy8gRE0tSEFSVCBDb21tYW5kIHJlc3BvbnNlCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9jbWRfcmNvZGVfbywgICAgICAgICAvLyBETS1IQVJUIENvbW1hbmQgcmV0dXJuIGNvZGU6IDAgLSBPazsgMSAtIEVycm9yCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9oYXJ0X2V2ZW50X28sICAgICAgICAvLyBETS1IQVJUIEV2ZW50OiAxIGlmIEhBUlQgZGVidWcgc3RhdGUgY2hhbmdlZAorICAgIG91dHB1dCB0eXBlX3NjcjFfaGR1X2hhcnRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICBoZHUyZG1faGFydF9zdGF0dXNfbywgICAgICAgLy8gRE0tSEFSVCBTdGF0dXMKKworICAgIC8vIFByb2dyYW0gQnVmZmVyIGkvZgorICAgIG91dHB1dCBsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICBoZHUyZG1fcGJ1Zl9hZGRyX28sICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgYWRkcmVzcyAtIHNvIGZhciByZXF1ZXN0IG9ubHkgZm9yIDEgaW5zdHJ1Y3Rpb24KKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICAgZG0yaGR1X3BidWZfaW5zdHJfaSwgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGluc3RydWN0aW9uCisKKyAgICAvLyBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmRtX2RyZWdfcmVxX28sICAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVxdWVzdAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fZHJlZ193cl9vLCAgICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZQorICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBoZHUyZG1fZHJlZ193ZGF0YV9vLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZSBkYXRhCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9kcmVnX3Jlc3BfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlc3BvbnNlCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMmhkdV9kcmVnX2ZhaWxfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIGZhaWwKKyAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgZG0yaGR1X2RyZWdfcmRhdGFfaSwgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVhZCBkYXRhCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgIC8vIEhEVSA8LT4gVERVIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUydGR1X2h3YnJrX2RzYmxfbywgICAgICAgLy8gRGlzYWJsZXMgQlJLTQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9pLCAgICAgICAgLy8gVHJpZ2dlciBNb2R1bGUgcmVxdWVzdHMgdHJhbnNpdGlvbiB0byBkZWJ1ZyBtb2RlCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJoZHVfaWJya3B0X2h3X2ksICAgICAgICAvLyBIYXJkd2FyZSBicmVha3BvaW50IG9uIGN1cnJlbnQgaW5zdHJ1Y3Rpb24KK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCisgICAgLy8gSEFSVCBSdW4gU3RhdHVzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2V4dV9idXN5X2ksICAgICAgICAvLyBFWFUgYnVzeQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmhkdV9pbnN0cmV0X2ksICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcmV0aXJlZCAod2l0aCBvciB3aXRob3V0IGV4Y2VwdGlvbikKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfaW5pdF9wY19pLCAgICAgICAgIC8vIFJlc2V0IGV4aXQKKworICAgIC8vIEhBUlQgSGFsdCBTdGF0dXMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfZXh1X2V4Y19yZXFfaSwgICAgIC8vIEV4Y2VwdGlvbiByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X2Jya3B0X2ksICAgICAgICAgICAvLyBTb2Z0d2FyZSBCcmVha3BvaW50IChFQlJFQUspCisKKyAgICAvLyBIRFUgPC0+IEVYVSBpL2YKKyAgICAvLyBIQVJUIFJ1biBDb250cm9sCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfcGJ1Zl9mZXRjaF9vLCAgICAgICAvLyBGZXRjaCBpbnN0cnVjdGlvbiBmcm9tIFByb2dyYW0gQnVmZmVyCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfbm9fY29tbWl0X28sICAgICAgICAvLyBGb3JiaWQgaW5zdHJ1Y3Rpb24gY29tbWl0bWVudAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2lycV9kc2JsX28sICAgICAgICAgLy8gRGlzYWJsZSBJUlEKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9wY19hZHZtdF9kc2JsX28sICAgIC8vIEZvcmJpZCBQQyBhZHZhbmNlbWVudAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2Rtb2RlX3NzdGVwX2VuX28sICAgLy8gRW5hYmxlIHNpbmdsZS1zdGVwCisKKyAgICAvLyBIQVJUIHN0YXRlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHRlZF9vLCAgICAgICAvLyBEZWJ1ZyBoYWx0ZWQgc3RhdGUKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfcnVuMmhhbHRfbywgICAgIC8vIFRyYW5zaXRpb24gdG8gZGVidWcgaGFsdGVkIHN0YXRlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJleHVfZGJnX2hhbHQycnVuX28sICAgICAvLyBUcmFuc2l0aW9uIHRvIHJ1biBzdGF0ZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyZXh1X2RiZ19ydW5fc3RhcnRfbywgICAgLy8gRmlyc3QgY3ljbGUgb2YgcnVuIHN0YXRlCisKKyAgICAvLyBQQyBpbnRlcmZhY2UKKyAgICBpbnB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJoZHVfcGNfY3Vycl9pLCAgICAgICAgIC8vIEN1cnJlbnQgUEMKKyAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgaGR1MmV4dV9kYmdfbmV3X3BjX28sICAgICAgIC8vIE5ldyBQQyBmb3IgcmVzdW1lCisKKyAgICAvLyBIRFUgPC0+IElGVSBpL2YKKyAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmhkdV9wYnVmX2luc3RyX3JkeV9pLCAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGkvZiByZWFkeQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbywgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gdmFsaWQKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2luc3RyX2Vycl9vLCAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGkvZiBlcnJvcgorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfbyAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaXRzZWxmCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgUGFyYW1ldGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfVElNRU9VVCAgICAgICA9IDY0OyAgICAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDIKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX1RJTUVPVVRfV0lEVEggPSAkY2xvZzIoU0NSMV9IRFVfVElNRU9VVCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBTaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBEZWJ1ZyBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEZTTSBjb250cm9sIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kaGFsdF9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnVuX3JlcTsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9ydW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fY21kX2RoYWx0ZWQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fY21kX2RydW47CisKKy8vIERlYnVnIHN0YXRlIEZTTSBzaWduYWxzCit0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3N0YXRlOwordHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9kaGFsdGVkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9kcnVuOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9ydW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3N0YXRlX3Jlc2V0OworCisvLyBGU00gdHJhbnNpdGlvbiwgdXBkYXRlIGFuZCBldmVudCByZWdpc3RlcnMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3RyYW5zOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmc21fZXZlbnQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0OworCisvLyBIQVJUIENvbnRyb2wgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcmVzdW1lX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfY21kX3JlcTsKKworLy8gSEFSVCBSdW4gQ29udHJvbCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybF91cGQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsX2NscjsKK3R5cGVfc2NyMV9oZHVfcnVuY3RybF9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmw7CisKKy8vIEhBUlQgaGFsdCByZXF1ZXN0IHRpbWVvdXQgY291bnRlciBzaWduYWxzCitsb2dpYyBbU0NSMV9IRFVfVElNRU9VVF9XSURUSC0xOjBdICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnQ7Citsb2dpYyBbU0NSMV9IRFVfVElNRU9VVF9XSURUSC0xOjBdICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnRfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2NudF9lbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2ZsYWc7CisKKy8vIEhBUlQgU3RhdHVzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVfc2NyMV9oZHVfaGFsdHN0YXR1c19zICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRzdGF0dXM7Cit0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9oYWx0Y2F1c2U7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2hhbHRfcG5kOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfaGFsdF9hY2s7CisKKy8vIERlYnVnIG1vZGUgY2F1c2UgZGVjb2RlciBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2Vfc3N0ZXA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vZGVfY2F1c2VfZXhjZXB0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtb2RlX2NhdXNlX2VicmVhazsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbW9kZV9jYXVzZV9hbnk7CitgaWZkZWYgU0NSMV9URFVfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbW9kZV9jYXVzZV90bXJlcTsKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCisvLyBQcm9ncmFtIEJ1ZmZlciBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFBCVUYgRlNNIGNvbnRyb2wgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9oYW5kc2hha2VfZG9uZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2V4Y19pbmpfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZXhjX2lual9lbmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9zdGFydF9mZXRjaDsKKworLy8gUEJVRiBGU00gc2lnbmFscwordHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2N1cnI7Cit0eXBlX3NjcjFfaGR1X3BidWZzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2ZzbV9pZGxlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2ZldGNoOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfZnNtX2V4Y2luajsKKworLy8gUEJVRiBhZGRyZXNzIHNpZ25hbHMKK2xvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICBwYnVmX2FkZHJfZmY7Citsb2dpYyBbU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1Zl9hZGRyX2VuZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnVmX2FkZHJfbmV4dF92ZDsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZfaW5zdHJfd2FpdF9sYXRjaGluZzsKKworLy8gRGVidWdzIENTUnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENTUnMgd3JpdGUvcmVhZCBpbnRlcmZhY2Ugc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl91cGRfb25faGFsdDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3Jfd3I7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyX2RhdGE7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3JkX2RhdGE7CisKKy8vIERlYnVnIENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3RlciAoRENTUikKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9zZWw7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfd3I7Cit0eXBlX3NjcjFfaGR1X2Rjc3JfcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3JfaW47Cit0eXBlX3NjcjFfaGR1X2Rjc3JfcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfb3V0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX2VicmVha207Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2Rjc3Jfc3RlcGllOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kY3NyX3N0ZXA7Citsb2dpYyBbU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfTC0KKyAgICAgICBTQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9SOjBdICAgICAgICAgICAgICAgICBjc3JfZGNzcl9jYXVzZTsKKworLy8gRGVidWcgUHJvZ3JhbSBDb3VudGVyIHJlZ2lzdGVyIChEUEMpCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY19zZWw7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RwY193cjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfbmV4dDsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZHBjX291dDsKKworLy8gRGVidWcgU2NyYXRjaCByZWdpc3RlciAwIChEU0NSQVRDSDApCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2FkZHJfZHNjcmF0Y2gwOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfc2VsOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kc2NyYXRjaDBfd3I7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9vdXQ7Cit0eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9yZXNwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVidWcgc3RhdGUgRlNNIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBEZWJ1ZyBzdGF0ZSBGU00gbG9naWMgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgorIC8vIC0gRlNNIGNvbnRyb2wgbG9naWMKKyAvLyAtIERlYnVnIHN0YXRlIEZTTQorIC8vIC0gRlNNIHRyYW5zaXRpb24sIHVwZGF0ZSBhbmQgZXZlbnQgcmVnaXN0ZXJzCisvLworCisvLyBGU00gY29udHJvbCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGRtX2NtZF9kaGFsdGVkID0gKGRtMmhkdV9jbWRfaSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKK2Fzc2lnbiBkbV9jbWRfcnVuICAgICA9IChkbTJoZHVfY21kX2kgPT0gU0NSMV9IRFVfREJHU1RBVEVfUlVOKTsKK2Fzc2lnbiBkbV9jbWRfZHJ1biAgICA9IChkbTJoZHVfY21kX2kgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7CisKK2Fzc2lnbiBkbV9kaGFsdF9yZXEgICA9IGRtMmhkdV9jbWRfcmVxX2kgJiBkbV9jbWRfZGhhbHRlZDsKK2Fzc2lnbiBkbV9ydW5fcmVxICAgICA9IGRtMmhkdV9jbWRfcmVxX2kgJiAoZG1fY21kX3J1biB8IGRtX2NtZF9kcnVuKTsKKworLy8gRGVidWcgc3RhdGUgRlNNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBkYmdfc3RhdGUgPD0gU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgZGJnX3N0YXRlIDw9IGRiZ19zdGF0ZV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKH5waXBlMmhkdV9yZGNfcWxmeV9pKSBiZWdpbgorICAgICAgICBkYmdfc3RhdGVfbmV4dCA9IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNhc2UgKGRiZ19zdGF0ZSkKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOiBiZWdpbgorICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gfnBpcGUyaGR1X2luaXRfcGNfaSA/IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbV9kaGFsdF9yZXEgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX1JVTjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOOiBiZWdpbgorICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gZGZzbV91cGRhdGUgICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SVU47CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQ6IGJlZ2luCisgICAgICAgICAgICAgICAgZGJnX3N0YXRlX25leHQgPSB+ZGZzbV91cGRhdGUgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZG1fY21kX2RydW4gICAgICAgICA/IFNDUjFfSERVX0RCR1NUQVRFX0RSVU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9EQkdTVEFURV9SVU47CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCisgICAgICAgICAgICAgICAgZGJnX3N0YXRlX25leHQgPSBkZnNtX3VwZGF0ZSAgICAgICAgID8gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX0RSVU47CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJlZ2luCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfWFhYOworYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgorICAgICAgICAgICAgICAgIGRiZ19zdGF0ZV9uZXh0ID0gZGJnX3N0YXRlOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYXNzaWduIGRiZ19zdGF0ZV9kaGFsdGVkID0gKGRiZ19zdGF0ZSA9PSBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEKTsKK2Fzc2lnbiBkYmdfc3RhdGVfZHJ1biAgICA9IChkYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTik7Cithc3NpZ24gZGJnX3N0YXRlX3J1biAgICAgPSAoZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JVTik7Cithc3NpZ24gZGJnX3N0YXRlX3Jlc2V0ICAgPSAoZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUKTsKKworLy8gRlNNIHRyYW5zaXRpb24sIHVwZGF0ZSBhbmQgZXZlbnQgcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBkZnNtX3RyYW5zICA8PSAxJ2IwOworICAgICAgICBkZnNtX3VwZGF0ZSA8PSAxJ2IwOworICAgICAgICBkZnNtX2V2ZW50ICA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGRmc21fdHJhbnMgIDw9IGRmc21fdHJhbnNfbmV4dDsKKyAgICAgICAgZGZzbV91cGRhdGUgPD0gZGZzbV91cGRhdGVfbmV4dDsKKyAgICAgICAgZGZzbV9ldmVudCAgPD0gZGZzbV9ldmVudF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZGZzbV90cmFuc19uZXh0ICA9IDEnYjA7CisgICAgZGZzbV91cGRhdGVfbmV4dCA9IDEnYjA7CisgICAgZGZzbV9ldmVudF9uZXh0ICA9IDEnYjA7CisKKyAgICBpZiAofnBpcGUyaGR1X3JkY19xbGZ5X2kpIGJlZ2luCisgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSAxJ2IwOworICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gMSdiMDsKKyAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9IDEnYjE7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY2FzZSAoZGJnX3N0YXRlKQorICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ6IGJlZ2luCisgICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGZzbV91cGRhdGVfbmV4dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGZzbV9ldmVudF9uZXh0ICA9IHBpcGUyaGR1X2luaXRfcGNfaSAmIH5kbTJoZHVfY21kX3JlcV9pOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTiwKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCisgICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9IH5kZnNtX3VwZGF0ZSA/IGhhcnRfaGFsdF9wbmQgOiBkZnNtX3RyYW5zOworICAgICAgICAgICAgICAgIGRmc21fdXBkYXRlX25leHQgPSB+ZGZzbV91cGRhdGUgJiBoYXJ0X2hhbHRfYWNrOworICAgICAgICAgICAgICAgIGRmc21fZXZlbnRfbmV4dCAgPSBkZnNtX3VwZGF0ZTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9ESEFMVEVEOiBiZWdpbgorICAgICAgICAgICAgICAgIGRmc21fdHJhbnNfbmV4dCAgPSB+ZGZzbV91cGRhdGUgPyB+ZGZzbV90cmFucyAmIGRtX3J1bl9yZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGZzbV90cmFuczsKKyAgICAgICAgICAgICAgICBkZnNtX3VwZGF0ZV9uZXh0ID0gfmRmc21fdXBkYXRlICYgZGZzbV90cmFuczsKKyAgICAgICAgICAgICAgICBkZnNtX2V2ZW50X25leHQgID0gZGZzbV91cGRhdGU7CisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgICAgICAgICAgZGZzbV90cmFuc19uZXh0ICA9ICdYOworICAgICAgICAgICAgICAgIGRmc21fdXBkYXRlX25leHQgPSAnWDsKKyAgICAgICAgICAgICAgICBkZnNtX2V2ZW50X25leHQgID0gJ1g7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIQVJUIENvbnRyb2wgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIEhBUlQgQ29udHJvbCBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBDb250cm9sIHNpZ25hbHMKKyAvLyAtIEhBUlQgUnVuIENvbnRyb2wgcmVnaXN0ZXIKKyAvLyAtIEhBUlQgSGFsdCBSZXF1ZXN0IFRpbWUtT3V0IGNvdW50ZXIKKy8vCisKKy8vIENvbnRyb2wgbG9naWMKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaGFydF9jbWRfcmVxID0gMSdiMDsKKworICAgIGlmICh+cGlwZTJoZHVfcmRjX3FsZnlfaSkgYmVnaW4KKyAgICAgICAgaGFydF9jbWRfcmVxID0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBjYXNlIChkYmdfc3RhdGUpCisgICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVCAgOiBoYXJ0X2NtZF9yZXEgPSBkbTJoZHVfY21kX3JlcV9pOworICAgICAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDogaGFydF9jbWRfcmVxID0gKGRmc21fdXBkYXRlIHwgZGZzbV90cmFucyk7CisgICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9SVU4sCisgICAgICAgICAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOICAgOiBoYXJ0X2NtZF9yZXEgPSB+ZGZzbV91cGRhdGUgJiBkZnNtX3RyYW5zOworICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgIDogaGFydF9jbWRfcmVxID0gJ1g7CisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCithc3NpZ24gaGFydF9oYWx0X3JlcSAgID0gZG1fY21kX2RoYWx0ZWQgJiBoYXJ0X2NtZF9yZXE7Cithc3NpZ24gaGFydF9yZXN1bWVfcmVxID0gKGRtX2NtZF9ydW4gfCBkbV9jbWRfZHJ1bikgJiBoYXJ0X2NtZF9yZXE7CisKKy8vIEhBUlQgUnVuIENvbnRyb2wgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBoYXJ0X3J1bmN0cmxfY2xyID0gKGRiZ19zdGF0ZV9ydW4gfCBkYmdfc3RhdGVfZHJ1bikKKyAgICAgICAgICAgICAgICAgICAgICAgICYgKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpOworYXNzaWduIGhhcnRfcnVuY3RybF91cGQgPSBkYmdfc3RhdGVfZGhhbHRlZCAmIGRmc21fdHJhbnNfbmV4dDsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgaGFydF9ydW5jdHJsLmlycV9kc2JsICAgICAgPD0gMSdiMDsKKyAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgPD0gU0NSMV9IRFVfRkVUQ0hfU1JDX05PUk1BTDsKKyAgICAgICAgaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmwgPD0gMSdiMDsKKyAgICAgICAgaGFydF9ydW5jdHJsLmh3YnJrcHRfZHNibCAgPD0gMSdiMDsKKyAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0ICAgICAgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgorICAgICAgICBpZiAoaGFydF9ydW5jdHJsX2NscikgYmVnaW4KKyAgICAgICAgICAgIGhhcnRfcnVuY3RybCAgICAgICAgICAgPD0gJzA7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICBpZiAoaGFydF9ydW5jdHJsX3VwZCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAofmRtX2NtZF9kcnVuKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDogcmVzdW1lIHRvIFJVTiBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaXJxX2RzYmwgICAgICAgIDw9IGNzcl9kY3NyX3N0ZXAgPyB+Y3NyX2Rjc3Jfc3RlcGllIDogMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgICA8PSBTQ1IxX0hEVV9GRVRDSF9TUkNfTk9STUFMOworICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwucGNfYWR2bXRfZHNibCAgIDw9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5od2Jya3B0X2RzYmwgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwICA8PSBjc3JfZGNzcl9zdGVwOworICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwucmVkaXJlY3QuZWJyZWFrIDw9IGNzcl9kY3NyX2VicmVha207CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSA6IHJlc3VtZSB0byBEUlVOIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5pcnFfZHNibCAgICAgICAgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLmZldGNoX3NyYyAgICAgICA8PSBTQ1IxX0hEVV9GRVRDSF9TUkNfUEJVRjsKKyAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnBjX2Fkdm10X2RzYmwgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBoYXJ0X3J1bmN0cmwuaHdicmtwdF9kc2JsICAgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGhhcnRfcnVuY3RybC5yZWRpcmVjdC5zc3RlcCAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgaGFydF9ydW5jdHJsLnJlZGlyZWN0LmVicmVhayA8PSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKKy8vIEhBUlQgSGFsdCBSZXF1ZXN0IFRpbWUtT3V0IGNvdW50ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIQVJUIGdvZXMgaW50byBoYWx0IHN0YXRlIG9ubHkgaWYgdGhlIGhhbHQgcmVxdWVzdCBpcyBwcmVzZW50IGZvciB0aW1lb3V0IHBlcmlvZAorLy8gb2YgdGltZQorCithc3NpZ24gaGFsdF9yZXFfdGltZW91dF9jbnRfZW4gPSBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoaGFydF9oYWx0X3JlcSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9vKTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgaGFsdF9yZXFfdGltZW91dF9jbnQgPD0gJzE7CisgICAgZW5kIGVsc2UgaWYgKGhhbHRfcmVxX3RpbWVvdXRfY250X2VuKSBiZWdpbgorICAgICAgICBoYWx0X3JlcV90aW1lb3V0X2NudCA8PSBoYWx0X3JlcV90aW1lb3V0X2NudF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBoYWx0X3JlcV90aW1lb3V0X2NudF9uZXh0ID0gaGR1MmV4dV9kYmdfaGFsdDJydW5fbyAgICAgICAgICAgICAgICAgICAgPyAnMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoaGFydF9oYWx0X3JlcSAmIH5oZHUyZXh1X2RiZ19ydW4yaGFsdF9vKSA/IGhhbHRfcmVxX3RpbWVvdXRfY250IC0gMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhbHRfcmVxX3RpbWVvdXRfY250OworCithc3NpZ24gaGFsdF9yZXFfdGltZW91dF9mbGFnID0gfnxoYWx0X3JlcV90aW1lb3V0X2NudDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhBUlQgU3RhdHVzIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBIQVJUIFN0YXR1cyBsb2dpYyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBEZWJ1ZyBtb2RlIGNhdXNlIGRlY29kZXIKKyAvLyAtIEhhcnQgaGFsdCBzdGF0dXMgY2F1c2UgZW5jb2RlcgorIC8vIC0gSGFydCBoYWx0IHN0YXR1cyByZWdpc3RlcgorLy8KKworLy8gRGVidWcgbW9kZSBjYXVzZSBkZWNvZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gZG1vZGVfY2F1c2Vfc3N0ZXAgID0gaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwICYgcGlwZTJoZHVfaW5zdHJldF9pOworYXNzaWduIGRtb2RlX2NhdXNlX2V4Y2VwdCA9IGRiZ19zdGF0ZV9kcnVuICYgcGlwZTJoZHVfZXh1X2V4Y19yZXFfaQorICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5waXBlMmhkdV9icmtwdF9pCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+ZXh1MmhkdV9pYnJrcHRfaHdfaQorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiBkbW9kZV9jYXVzZV9lYnJlYWsgPSBoYXJ0X3J1bmN0cmwucmVkaXJlY3QuZWJyZWFrICYgcGlwZTJoZHVfYnJrcHRfaTsKK2BpZmRlZiBTQ1IxX1REVV9FTgorYXNzaWduIGRtb2RlX2NhdXNlX3RtcmVxICA9IHRkdTJoZHVfZG1vZGVfcmVxX2kgJiBleHUyaGR1X2licmtwdF9od19pOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKK2Fzc2lnbiBkbW9kZV9jYXVzZV9hbnkgPSBkbW9kZV9jYXVzZV9zc3RlcCB8IGRtb2RlX2NhdXNlX2VicmVhayB8IGRtb2RlX2NhdXNlX2V4Y2VwdAorICAgICAgICAgICAgICAgICAgICAgICB8IGhhcnRfaGFsdF9yZXEKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgICAgICAgICB8IGRtb2RlX2NhdXNlX3RtcmVxCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBIQVJUIGhhbHQgY2F1c2UgZW5jb2RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorYGlmZGVmIFNDUjFfVERVX0VOCisgICAgICAgIGRtb2RlX2NhdXNlX3RtcmVxICAgOiBoYXJ0X2hhbHRjYXVzZSA9IFNDUjFfSERVX0hBTFRDQVVTRV9UTVJFUTsKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorICAgICAgICBkbW9kZV9jYXVzZV9lYnJlYWsgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRUJSRUFLOworICAgICAgICBoYXJ0X2hhbHRfcmVxICAgICAgIDogaGFydF9oYWx0Y2F1c2UgPSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRE1SRVE7CisgICAgICAgIGRtb2RlX2NhdXNlX3NzdGVwICAgOiBoYXJ0X2hhbHRjYXVzZSA9IFNDUjFfSERVX0hBTFRDQVVTRV9TU1RFUDsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGhhcnRfaGFsdGNhdXNlID0gU0NSMV9IRFVfSEFMVENBVVNFX05PTkU7CisgICAgZW5kY2FzZQorZW5kCisKKy8vIEhBUlQgaGFsdCBzdGF0dXMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGhhcnRfaGFsdHN0YXR1cyAgICAgICAgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYgKGhhcnRfaGFsdF9hY2spIGJlZ2luCisgICAgICAgIGhhcnRfaGFsdHN0YXR1cy5leGNlcHQgPD0gZG1vZGVfY2F1c2VfZXhjZXB0OworICAgICAgICBoYXJ0X2hhbHRzdGF0dXMuY2F1c2UgIDw9IGhhcnRfaGFsdGNhdXNlOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBoYXJ0X2hhbHRfcG5kID0gKGRmc21fdHJhbnMgfCBkbV9kaGFsdF9yZXEpICYgfmhhcnRfaGFsdF9hY2s7Cithc3NpZ24gaGFydF9oYWx0X2FjayA9IH5oZHUyZXh1X2RiZ19oYWx0ZWRfbworICAgICAgICAgICAgICAgICAgICAgJiAoaGFsdF9yZXFfdGltZW91dF9mbGFnIHwgKH5waXBlMmhkdV9leHVfYnVzeV9pICYgZG1vZGVfY2F1c2VfYW55KSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm9ncmFtIEJ1ZmZlciAoUEJVRikgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFByb2dyYW0gQnVmZmVyIGFsbG93cyB0byBleGVjdXRlIHNtYWxsIHByb2dyYW1zIGluIGRlYnVnIG1vZGUKKy8vCisKKy8vIFRvIHRlcm1pbmF0ZSBQcm9ncmFtIEJ1ZmZlciBleGVjdXRpb24gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQuIFRoZXJlIGFyZSAyCisvLyBjYXNlczoKKy8vIC0gT25lIG9mIFBCVUYgaW5zdHJ1Y3Rpb25zIHJhaXNlIGFuIGV4Y2VwdGlvbgorLy8gLSBObyBQQlVGIGluc3RydWN0aW9uIHJhaXNlIGFuIGV4Y2VwdGlvbiBiZWZvcmUgdGhlIGxhc3QgUEJVRiBpbnN0cnVjdGlvbiBoYXMKKy8vIGJlZW4gaXNzdWVkLiBJbiB0aGlzIGNhc2UgRlNNIGdvZXMgaW50byBFWENJTkpFQ1Qgc3RhdGUgYW5kIGFuICJJbnN0cnVjdGlvbgorLy8gZmV0Y2ggYWNjZXNzIGZhdWx0IiBleGNlcHRpb24gaXMgaW5qZWN0ZWQKKworLy8gUEJVRiBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBpZnVfaGFuZHNoYWtlX2RvbmUgPSBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbyAmIGlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaTsKK2Fzc2lnbiBwYnVmX2FkZHJfZW5kICAgICAgPSAocGJ1Zl9hZGRyX2ZmID09IChTQ1IxX0hEVV9QQlVGX0FERFJfU1BBTi0xKSk7CisKK2Fzc2lnbiBwYnVmX3N0YXJ0X2ZldGNoID0gZGJnX3N0YXRlX2RoYWx0ZWQgICAgICAmIChkYmdfc3RhdGVfbmV4dCA9PSBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOKTsKK2Fzc2lnbiBwYnVmX2V4Y19pbmpfcmVxID0gaWZ1X2hhbmRzaGFrZV9kb25lICAgICAmIHBidWZfYWRkcl9lbmQ7Cithc3NpZ24gcGJ1Zl9leGNfaW5qX2VuZCA9IHBpcGUyaGR1X2V4dV9leGNfcmVxX2kgfCBpZnVfaGFuZHNoYWtlX2RvbmU7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHBidWZfZnNtX2N1cnIgPD0gU0NSMV9IRFVfUEJVRlNUQVRFX0lETEU7CisgICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgorICAgICAgICBwYnVmX2ZzbV9jdXJyIDw9IHBidWZfZnNtX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlIChwYnVmX2ZzbV9jdXJyKQorICAgICAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRTogYmVnaW4KKyAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBwYnVmX3N0YXJ0X2ZldGNoICAgICAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX1BCVUZTVEFURV9JRExFOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENIOiBiZWdpbgorICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dCA9IHBpcGUyaGR1X2V4dV9leGNfcmVxX2kgPyBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYnVmX2V4Y19pbmpfcmVxICAgICAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0g7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfRVhDSU5KRUNUOiBiZWdpbgorICAgICAgICAgICAgcGJ1Zl9mc21fbmV4dCA9IHBidWZfZXhjX2lual9lbmQgICAgICAgPyBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVDsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfSERVX1BCVUZTVEFURV9XQUlUNEVORDogYmVnaW4KKyAgICAgICAgICAgIHBidWZfZnNtX25leHQgPSBoZHUyZXh1X2RiZ19oYWx0ZWRfbyAgID8gU0NSMV9IRFVfUEJVRlNUQVRFX0lETEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9IRFVfUEJVRlNUQVRFX1dBSVQ0RU5EOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIHBidWZfZnNtX2lkbGUgICA9IChwYnVmX2ZzbV9jdXJyID09IFNDUjFfSERVX1BCVUZTVEFURV9JRExFKTsKK2Fzc2lnbiBwYnVmX2ZzbV9mZXRjaCAgPSAocGJ1Zl9mc21fY3VyciA9PSBTQ1IxX0hEVV9QQlVGU1RBVEVfRkVUQ0gpOworYXNzaWduIHBidWZfZnNtX2V4Y2luaiA9IChwYnVmX2ZzbV9jdXJyID09IFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QpOworCisvLyBQcm9ncmFtIEJ1ZmZlciBhZGRyZXNzIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gcGJ1Zl9hZGRyX25leHRfdmQgPSBwYnVmX2ZzbV9mZXRjaCAgICAgICAgICAmIGlmdV9oYW5kc2hha2VfZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICYgfnBpcGUyaGR1X2V4dV9leGNfcmVxX2kgJiB+cGJ1Zl9hZGRyX2VuZDsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgcGJ1Zl9hZGRyX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmKGNsa19lbikgYmVnaW4KKyAgICAgICAgcGJ1Zl9hZGRyX2ZmIDw9IHBidWZfYWRkcl9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBwYnVmX2FkZHJfbmV4dCA9IHBidWZfZnNtX2lkbGUgICAgID8gJzAKKyAgICAgICAgICAgICAgICAgICAgICA6IHBidWZfYWRkcl9uZXh0X3ZkID8gcGJ1Zl9hZGRyX2ZmICsgMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYnVmX2FkZHJfZmY7CisKKy8vIFBhc3MgaW5zdHJ1Y3Rpb24gZnJvbSBkZWJ1ZyBwcm9ncmFtIGJ1ZmZlciB0byBjcHUgcGlwZWxpbmUgd2l0aCB0d28gb3B0aW9uczoKKy8vIC0gdGhyb3VnaCByZWdpc3RlciwgYmV0dGVyIGZvciBmcmVxdWVuY3kKKy8vIC0gdGhyb3VnaCB3aXJlcywgYmV0dGVyIGZvciBhcmVhCitnZW5lcmF0ZSBpZiAoSEFSVF9QQlVGX0lOU1RSX1JFR09VVF9FTikgYmVnaW4KKyAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgICAgIHBidWZfaW5zdHJfd2FpdF9sYXRjaGluZyA8PSAxJ2IwOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgcGJ1Zl9pbnN0cl93YWl0X2xhdGNoaW5nIDw9IGlmdV9oYW5kc2hha2VfZG9uZTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQgZWxzZSBiZWdpbgorICAgIGFzc2lnbiBwYnVmX2luc3RyX3dhaXRfbGF0Y2hpbmcgPSAxJ2IwOworZW5kIGVuZGdlbmVyYXRlCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWJ1ZyBDU1JzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gY3NyX3VwZF9vbl9oYWx0ID0gKGRiZ19zdGF0ZV9yZXNldCB8IGRiZ19zdGF0ZV9ydW4pCisgICAgICAgICAgICAgICAgICAgICAgICYgKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpOworCisvLyBDU1JzIHNlbGVjdCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4gOiBjc3JfaWZfcmVnc2VsCisgICAgY3NyX2Rjc3Jfc2VsICAgICAgICA9IDEnYjA7CisgICAgY3NyX2RwY19zZWwgICAgICAgICA9IDEnYjA7CisgICAgY3NyX2RzY3JhdGNoMF9zZWwgICA9IDEnYjA7CisgICAgLy9jc3JfZHNjcmF0Y2gxX3NlbCAgID0gMSdiMDsKKworICAgIGlmIChjc3IyaGR1X3JlcV9pKSBiZWdpbgorICAgICAgICBjYXNlIChjc3IyaGR1X2FkZHJfaSkKKyAgICAgICAgICAgIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RDU1IgICAgIDogY3NyX2Rjc3Jfc2VsICAgICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFBDICAgICAgOiBjc3JfZHBjX3NlbCAgICAgICA9IDEnYjE7CisgICAgICAgICAgICBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDA6IGNzcl9kc2NyYXRjaDBfc2VsID0gMSdiMTsKKyAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfZGNzcl9zZWwgICAgICA9IDEnYlg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9kcGNfc2VsICAgICAgID0gMSdiWDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2RzY3JhdGNoMF9zZWwgPSAxJ2JYOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZCA6IGNzcl9pZl9yZWdzZWwKKworLy8gQ1NScyByZWFkIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGNzcl9yZF9kYXRhID0gY3NyX2Rjc3Jfb3V0IHwgY3NyX2RwY19vdXQgfCBjc3JfZHNjcmF0Y2gwX291dDsKKworLy8gQ1NScyB3cml0ZSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjc3Jfd3IgPSBjc3IyaGR1X3JlcV9pOworCithbHdheXNfY29tYiBiZWdpbiA6IGNzcl9pZl93cml0ZQorICAgIGNzcl93cl9kYXRhICAgICA9ICcwOworCisgICAgaWYgKGNzcjJoZHVfcmVxX2kpIGJlZ2luCisgICAgICAgIGNhc2UgKGNzcjJoZHVfY21kX2kpCisgICAgICAgICAgICBTQ1IxX0NTUl9DTURfV1JJVEUgOiBjc3Jfd3JfZGF0YSA9IGNzcjJoZHVfd2RhdGFfaTsKKyAgICAgICAgICAgIFNDUjFfQ1NSX0NNRF9TRVQgICA6IGNzcl93cl9kYXRhID0gY3NyX3JkX2RhdGEgfCBjc3IyaGR1X3dkYXRhX2k7CisgICAgICAgICAgICBTQ1IxX0NTUl9DTURfQ0xFQVIgOiBjc3Jfd3JfZGF0YSA9IGNzcl9yZF9kYXRhICYgKH5jc3IyaGR1X3dkYXRhX2kpOworICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDogY3NyX3dyX2RhdGEgPSAnWDsKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kIDogY3NyX2lmX3dyaXRlCisKKy8vIERlYnVnIENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNldHVwcyB0aGUgSEFSVCBiZWhhdmlvdXIgaW4gRGVidWcgTW9kZSBhbmQgaG9sZHMgRGVidWcgc3RhdHVzIGluZm9ybWF0aW9uCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY3NyX2Rjc3JfaW4gICAgICAgICAgICAgICAgID0gY3NyX3dyX2RhdGE7CisgICAgY3NyX2Rjc3Jfd3IgICAgICAgICAgICAgICAgID0gY3NyX3dyICYgY3NyX2Rjc3Jfc2VsOworCisgICAgY3NyX2Rjc3Jfb3V0ICAgICAgICAgICAgICAgID0gJzA7CisgICAgaWYgKGNzcl9kY3NyX3NlbCkgYmVnaW4KKyAgICAgICAgY3NyX2Rjc3Jfb3V0LnhkZWJ1Z3ZlciAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9EQ1NSX1hERUJVR1ZFUjsKKyAgICAgICAgY3NyX2Rjc3Jfb3V0LmVicmVha20gICAgPSBjc3JfZGNzcl9lYnJlYWttOworICAgICAgICBjc3JfZGNzcl9vdXQuc3RlcGllICAgICA9IGNzcl9kY3NyX3N0ZXBpZTsKKyAgICAgICAgY3NyX2Rjc3Jfb3V0LnN0ZXAgICAgICAgPSBjc3JfZGNzcl9zdGVwOworICAgICAgICBjc3JfZGNzcl9vdXQucHJ2ICAgICAgICA9IDInYjExOworICAgICAgICBjc3JfZGNzcl9vdXQuY2F1c2UgICAgICA9IGNzcl9kY3NyX2NhdXNlOworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGNzcl9kY3NyX2VicmVha20gICAgICAgIDw9IDEnYjA7CisgICAgICAgIGNzcl9kY3NyX3N0ZXBpZSAgICAgICAgIDw9IDEnYjA7CisgICAgICAgIGNzcl9kY3NyX3N0ZXAgICAgICAgICAgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgorICAgICAgICBpZiAoY3NyX2Rjc3Jfd3IpIGJlZ2luCisgICAgICAgICAgICBjc3JfZGNzcl9lYnJlYWttICAgIDw9IGNzcl9kY3NyX2luLmVicmVha207CisgICAgICAgICAgICBjc3JfZGNzcl9zdGVwaWUgICAgIDw9IGNzcl9kY3NyX2luLnN0ZXBpZTsKKyAgICAgICAgICAgIGNzcl9kY3NyX3N0ZXAgICAgICAgPD0gY3NyX2Rjc3JfaW4uc3RlcDsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX2Rjc3JfY2F1c2UgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBpZihjbGtfZW4pIGJlZ2luCisgICAgICAgIGlmKGNzcl91cGRfb25faGFsdCkgYmVnaW4KKyAgICAgICAgICAgIGNzcl9kY3NyX2NhdXNlIDw9IGhhcnRfaGFsdHN0YXR1cy5jYXVzZTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8gRGVidWcgUEMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTYXZlcyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gRGVidWcKKy8vIE1vZGUgaXMgZW50ZXJlZC4gQ291bGQgYmUgY2hhbmdlZCBieSBkZWJ1Z2dlcgorCithc3NpZ24gY3NyX2RwY193ciAgID0gY3NyX3dyICYgY3NyX2RwY19zZWw7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGNzcl9kcGNfZmYgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYoY2xrX2VuKSBiZWdpbgorICAgICAgICBjc3JfZHBjX2ZmIDw9IGNzcl9kcGNfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gY3NyX2RwY19uZXh0ID0gY3NyX3VwZF9vbl9oYWx0ID8gcGlwZTJoZHVfcGNfY3Vycl9pCisgICAgICAgICAgICAgICAgICAgIDogY3NyX2RwY193ciAgICAgID8gY3NyX3dyX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfZHBjX2ZmOworYXNzaWduIGNzcl9kcGNfb3V0ICA9IGNzcl9kcGNfc2VsICAgICA/IGNzcl9kcGNfZmYgOiAnMDsKKworLy8gRGVidWcgU2NyYXRjaCAwIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gY3NyX2RzY3JhdGNoMF9yZXNwID0gKH5kbTJoZHVfZHJlZ19yZXNwX2kgfCBkbTJoZHVfZHJlZ19mYWlsX2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9DU1JfUkVTUF9FUgorICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfQ1NSX1JFU1BfT0s7Cithc3NpZ24gY3NyX2RzY3JhdGNoMF9vdXQgID0gY3NyX2RzY3JhdGNoMF9zZWwgPyBkbTJoZHVfZHJlZ19yZGF0YV9pIDogJzA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIRFUgPC0+IERNIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGhkdTJkbV9oYXJ0X2V2ZW50X28gPSBkZnNtX2V2ZW50OworCisvLyBIQVJUIHN0YXR1cworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBoZHUyZG1faGFydF9zdGF0dXNfbyAgICAgICAgICAgPSAnMDsKKyAgICBoZHUyZG1faGFydF9zdGF0dXNfby5kYmdfc3RhdGUgPSBkYmdfc3RhdGU7CisgICAgaGR1MmRtX2hhcnRfc3RhdHVzX28uZXhjZXB0ICAgID0gZGJnX3N0YXRlX2RoYWx0ZWQgJiBoYXJ0X2hhbHRzdGF0dXMuZXhjZXB0OworICAgIGhkdTJkbV9oYXJ0X3N0YXR1c19vLmVicmVhayAgICA9IGRiZ19zdGF0ZV9kaGFsdGVkICYgKGhhcnRfaGFsdHN0YXR1cy5jYXVzZSA9PSBTQ1IxX0hEVV9IQUxUQ0FVU0VfRUJSRUFLKTsKK2VuZAorCithc3NpZ24gaGR1MmRtX2NtZF9yY29kZV9vID0gZGJnX3N0YXRlX3Jlc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgID8gfnBpcGUyaGR1X3JkY19xbGZ5X2kgfCB+cGlwZTJoZHVfaW5pdF9wY19pIHwgfmRtMmhkdV9jbWRfcmVxX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+cGlwZTJoZHVfcmRjX3FsZnlfaSB8IH5kZnNtX3VwZGF0ZTsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBoZHUyZG1fY21kX3Jlc3BfbyAgID0gMSdiMDsKKworICAgIGNhc2UgKGRiZ19zdGF0ZSkKKyAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUkVTRVQ6IGJlZ2luCisgICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbyAgPSBwaXBlMmhkdV9yZGNfcWxmeV9pICYgcGlwZTJoZHVfaW5pdF9wY19pICYgZG0yaGR1X2NtZF9yZXFfaTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOOiBiZWdpbgorICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gcGlwZTJoZHVfcmRjX3FsZnlfaSAmIGRmc21fdXBkYXRlICYgZG0yaGR1X2NtZF9yZXFfaTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDogYmVnaW4KKyAgICAgICAgICAgIGhkdTJkbV9jbWRfcmVzcF9vICA9IHBpcGUyaGR1X3JkY19xbGZ5X2kgPyBkZnNtX3VwZGF0ZSA6IGRtMmhkdV9jbWRfcmVxX2k7CisgICAgICAgIGVuZAorCisgICAgICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU46IGJlZ2luCisgICAgICAgICAgICBoZHUyZG1fY21kX3Jlc3BfbyAgPSAofnBpcGUyaGR1X3JkY19xbGZ5X2kgfCBkZnNtX3VwZGF0ZSkgJiBkbTJoZHVfY21kX3JlcV9pOworICAgICAgICBlbmQKKworICAgICAgICBkZWZhdWx0OiBiZWdpbgorICAgICAgICAgICAgaGR1MmRtX2NtZF9yZXNwX28gID0gJ1g7CisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCithc3NpZ24gaGR1MmRtX3BidWZfYWRkcl9vICA9IHBidWZfYWRkcl9mZjsKK2Fzc2lnbiBoZHUyZG1fZHJlZ19yZXFfbyAgID0gY3NyX2RzY3JhdGNoMF9zZWw7Cithc3NpZ24gaGR1MmRtX2RyZWdfd3JfbyAgICA9IGNzcl93ciAmIGNzcl9kc2NyYXRjaDBfc2VsOworYXNzaWduIGhkdTJkbV9kcmVnX3dkYXRhX28gPSBjc3Jfd3JfZGF0YTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhEVSA8LT4gRVhVIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGhkdTJleHVfZGJnX2hhbHRlZF9vICAgID0gKGRiZ19zdGF0ZV9uZXh0ID09IFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAofnBpcGUyaGR1X3JkY19xbGZ5X2kgJiB+ZGJnX3N0YXRlX3J1bik7Cithc3NpZ24gaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X28gPSBkYmdfc3RhdGVfZGhhbHRlZCAmIHBpcGUyaGR1X3JkY19xbGZ5X2kgJiBkZnNtX3VwZGF0ZTsKK2Fzc2lnbiBoZHUyZXh1X2RiZ19oYWx0MnJ1bl9vICA9IGhkdTJleHVfZGJnX2hhbHRlZF9vICYgaGFydF9yZXN1bWVfcmVxCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjbGtfcGlwZV9lbgorYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK2Fzc2lnbiBoZHUyZXh1X2RiZ19ydW4yaGFsdF9vICA9IGhhcnRfaGFsdF9hY2s7CisKK2Fzc2lnbiBoZHUyZXh1X3BidWZfZmV0Y2hfbyAgICA9IGhhcnRfcnVuY3RybC5mZXRjaF9zcmM7Cithc3NpZ24gaGR1MmV4dV9pcnFfZHNibF9vICAgICAgPSBoYXJ0X3J1bmN0cmwuaXJxX2RzYmw7Cithc3NpZ24gaGR1MmV4dV9wY19hZHZtdF9kc2JsX28gPSBoYXJ0X3J1bmN0cmwucGNfYWR2bXRfZHNibDsKKy8vIE5vIGNoYW5nZSBpbiBhcmNoLiBzdGF0ZSBpZiBkbW9kZSBjYXVzZWQgYnkgYnJlYWtwb2ludAorYXNzaWduIGhkdTJleHVfbm9fY29tbWl0X28gICAgID0gZG1vZGVfY2F1c2VfZWJyZWFrCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRtb2RlX2NhdXNlX3RtcmVxCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cithc3NpZ24gaGR1MmV4dV9kbW9kZV9zc3RlcF9lbl9vID0gaGFydF9ydW5jdHJsLnJlZGlyZWN0LnNzdGVwOworYXNzaWduIGhkdTJleHVfZGJnX25ld19wY19vICAgICA9IGNzcl9kcGNfZmY7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIRFUgPC0+IElGVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBoZHUyaWZ1X3BidWZfaW5zdHJfdmRfbyAgPSAocGJ1Zl9mc21fZmV0Y2ggfCBwYnVmX2ZzbV9leGNpbmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfnBidWZfaW5zdHJfd2FpdF9sYXRjaGluZzsKK2Fzc2lnbiBoZHUyaWZ1X3BidWZfaW5zdHJfZXJyX28gPSBwYnVmX2ZzbV9leGNpbmo7CisKK2dlbmVyYXRlIGlmIChIQVJUX1BCVUZfSU5TVFJfUkVHT1VUX0VOKSBiZWdpbgorICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgICBoZHUyaWZ1X3BidWZfaW5zdHJfbyA8PSBkbTJoZHVfcGJ1Zl9pbnN0cl9pOworICAgIGVuZAorZW5kIGVsc2UgYmVnaW4KKyAgICBhc3NpZ24gaGR1MmlmdV9wYnVmX2luc3RyX28gPSBkbTJoZHVfcGJ1Zl9pbnN0cl9pOworZW5kIGVuZGdlbmVyYXRlCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIRFUgPC0+IENTUiBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjc3JfYWRkcl9kc2NyYXRjaDAgPSAoY3NyMmhkdV9hZGRyX2kgPT0gU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwKTsKKworYXNzaWduIGhkdTJjc3JfcmVzcF9vICA9IH5kYmdfc3RhdGVfZHJ1biAgICA/IFNDUjFfQ1NSX1JFU1BfRVIKKyAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfYWRkcl9kc2NyYXRjaDAgPyBjc3JfZHNjcmF0Y2gwX3Jlc3AKKyAgICAgICAgICAgICAgICAgICAgICAgOiBjc3IyaGR1X3JlcV9pICAgICAgPyBTQ1IxX0NTUl9SRVNQX09LCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9DU1JfUkVTUF9FUjsKK2Fzc2lnbiBoZHUyY3NyX3JkYXRhX28gPSBjc3JfcmRfZGF0YTsKKworYGlmZGVmIFNDUjFfVERVX0VOCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSERVIDwtPiBURFUgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gaGR1MnRkdV9od2Jya19kc2JsX28gPSBoYXJ0X3J1bmN0cmwuaHdicmtwdF9kc2JsOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTVkFfSERVX1hDSEVDS19DT01NT04gOgorICAgIGFzc2VydCBwcm9wZXJ0eSAoCisgICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgICAgICEkaXN1bmtub3duKCB7cnN0X24sY2xrLGNsa19lbixjc3IyaGR1X3JlcV9pLHBpcGUyaGR1X3JkY19xbGZ5X2l9ICkKKyAgICApCisgICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogY29tbW9uIHNpZ25hbHMgYXJlIGluIFggc3RhdGUiKTsKKworU1ZBX0hEVV9YQ0hFQ0tfQ1NSX0lOVEYgOgorICAgIGFzc2VydCBwcm9wZXJ0eSAoCisgICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgICAgIGNzcjJoZHVfcmVxX2kgfC0+ICEkaXN1bmtub3duKCB7Y3NyMmhkdV9jbWRfaSxjc3IyaGR1X2FkZHJfaSxjc3IyaGR1X3dkYXRhX2l9ICkKKyAgICApCisgICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogQ1NSIGkvZiBpcyBpbiBYIHN0YXRlIik7CisKK1NWQV9IRFVfWENIRUNLX0RNX0lOVEYgOgorICAgIGFzc2VydCBwcm9wZXJ0eSAoCisgICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgICAgICEkaXN1bmtub3duKCB7ZG0yaGR1X2NtZF9yZXFfaSxkbTJoZHVfY21kX2ksZG0yaGR1X2RyZWdfcmVzcF9pLAorICAgICAgICBkbTJoZHVfZHJlZ19mYWlsX2l9ICkKKyAgICApCisgICAgZWxzZSAkZXJyb3IoIkhEVSBFcnJvcjogRE0gaS9mIGlzIGluIFggc3RhdGUiKTsKKworU1ZBX0hEVV9YQ0hFQ0tfVERVX0lOVEYgOgorICAgIGFzc2VydCBwcm9wZXJ0eSAoCisgICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgICAgICEkaXN1bmtub3duKCB7dGR1MmhkdV9kbW9kZV9yZXFfaSxleHUyaGR1X2licmtwdF9od19pfSApCisgICAgKQorICAgIGVsc2UgJGVycm9yKCJIRFUgRXJyb3I6IFREVSBpL2YgaXMgaW4gWCBzdGF0ZSIpOworCitTVkFfSERVX1hDSEVDS19IQVJUX0lOVEYgOgorICAgIGFzc2VydCBwcm9wZXJ0eSAoCisgICAgICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgICAgICEkaXN1bmtub3duKCB7cGlwZTJoZHVfZXh1X2J1c3lfaSxwaXBlMmhkdV9pbnN0cmV0X2kscGlwZTJoZHVfaW5pdF9wY19pLHBpcGUyaGR1X2V4dV9leGNfcmVxX2kscGlwZTJoZHVfYnJrcHRfaSwKKyAgICAgICAgcGlwZTJoZHVfcGNfY3Vycl9pLGlmdTJoZHVfcGJ1Zl9pbnN0cl9yZHlfaX0gKQorICAgICkKKyAgICBlbHNlICRlcnJvcigiSERVIEVycm9yOiBIQVJUIGkvZiBpcyBpbiBYIHN0YXRlIik7CisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfaGR1CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWFsdS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMxYzIwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lhbHUuc3YKQEAgLTAsMCArMSw3MjAgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pYWx1LnN2PgorLy8vIEBicmllZiAgICAgIEludGVnZXIgQXJpdGhtZXRpYyBMb2dpYyBVbml0IChJQUxVKQorLy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIFBlcmZvcm1zIGFkZGl0aW9uL3N1YnRyYWN0aW9uIGFuZCBhcml0aG1ldGljIGFuZCBicmFuY2ggY29tcGFyaXNvbnMKKyAvLyAtIFBlcmZvcm1zIGxvZ2ljYWwgb3BlcmF0aW9ucyAoQU5EKEkpLCBPUihJKSwgWE9SKEkpKQorIC8vIC0gUGVyZm9ybXMgYWRkcmVzcyBjYWxjdWxhdGlvbiBmb3IgYnJhbmNoLCBqdW1wLCBETUVNIGxvYWQgYW5kIHN0b3JlIGFuZCBBVUlQQworIC8vICAgaW5zdHJ1Y3Rpb25zCisgLy8gLSBQZXJmb3JtcyBzaGlmdCBvcGVyYXRpb25zCisgLy8gLSBQZXJmb3JtcyBNVUwvRElWIG9wZXJhdGlvbnMKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIE1haW4gYWRkZXIKKyAvLyAtIEFkZHJlc3MgYWRkZXIKKyAvLyAtIFNoaWZ0IGxvZ2ljCisgLy8gLSBNVUwvRElWIGxvZ2ljCisgLy8gLSBPdXRwdXQgcmVzdWx0IG11bHRpcGxleGVyCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCitgaW5jbHVkZSAic2NyMV9zZWFyY2hfbXMxLnN2aCIKKworCittb2R1bGUgc2NyMV9waXBlX2lhbHUgKAorYGlmZGVmIFNDUjFfUlZNX0VYVAorICAgIC8vIENvbW1vbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUFMVSBjbG9jaworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gSUFMVSByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWFsdV9ydm1fY21kX3ZkX2ksICAgICAgLy8gTVVML0RJViBjb21tYW5kIHZhbGlkCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28sICAgICAvLyBNVUwvRElWIHJlc3VsdCByZWFkeQorYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAorCisgICAgLy8gTWFpbiBhZGRlcgorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBleHUyaWFsdV9tYWluX29wMV9pLCAgICAgICAgLy8gbWFpbiBBTFUgMXN0IG9wZXJhbmQKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgZXh1MmlhbHVfbWFpbl9vcDJfaSwgICAgICAgIC8vIG1haW4gQUxVIDJuZCBvcGVyYW5kCisgICAgaW5wdXQgICB0eXBlX3NjcjFfaWFsdV9jbWRfc2VsX2UgICAgICAgIGV4dTJpYWx1X2NtZF9pLCAgICAgICAgICAgICAvLyBJQUxVIGNvbW1hbmQKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbywgICAgICAgIC8vIG1haW4gQUxVIHJlc3VsdAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1MmV4dV9jbXBfcmVzX28sICAgICAgICAgLy8gSUFMVSBjb21wYXJpc29uIHJlc3VsdAorCisgICAgLy8gQWRkcmVzcyBhZGRlcgorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBleHUyaWFsdV9hZGRyX29wMV9pLCAgICAgICAgLy8gQWRkcmVzcyBhZGRlciAxc3Qgb3BlcmFuZAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBleHUyaWFsdV9hZGRyX29wMl9pLCAgICAgICAgLy8gQWRkcmVzcyBhZGRlciAybmQgb3BlcmFuZAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBpYWx1MmV4dV9hZGRyX3Jlc19vICAgICAgICAgLy8gQWRkcmVzcyBhZGRlciByZXN1bHQKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgcGFyYW1ldGVycyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyBgaWZkZWYgU0NSMV9GQVNUX01VTAorbG9jYWxwYXJhbSBTQ1IxX01VTF9XSURUSCAgICAgPSBgU0NSMV9YTEVOOworbG9jYWxwYXJhbSBTQ1IxX01VTF9SRVNfV0lEVEggPSAyICogYFNDUjFfWExFTjsKK2xvY2FscGFyYW0gU0NSMV9NRFVfU1VNX1dJRFRIID0gYFNDUjFfWExFTiArIDE7CisgYGVsc2UKK2xvY2FscGFyYW0gU0NSMV9NVUxfU1RHX05VTSAgID0gMzI7Citsb2NhbHBhcmFtIFNDUjFfTVVMX1dJRFRIICAgICA9IDMyIC8gU0NSMV9NVUxfU1RHX05VTTsKK2xvY2FscGFyYW0gU0NSMV9NVUxfQ05UX0lOSVQgID0gMzInYjEgPDwgKGBTQ1IxX1hMRU4vU0NSMV9NVUxfV0lEVEggLSAyKTsKK2xvY2FscGFyYW0gU0NSMV9NRFVfU1VNX1dJRFRIID0gYFNDUjFfWExFTiArIFNDUjFfTVVMX1dJRFRIOworIGBlbmRpZiAvLyB+U0NSMV9GQVNUX01VTAorbG9jYWxwYXJhbSBTQ1IxX0RJVl9XSURUSCAgICAgPSAxOworbG9jYWxwYXJhbSBTQ1IxX0RJVl9DTlRfSU5JVCAgPSAzMidiMSA8PCAoYFNDUjFfWExFTi9TQ1IxX0RJVl9XSURUSCAtIDIpOworYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICB6OyAgICAgIC8vIFplcm8KKyAgICBsb2dpYyAgICAgICBzOyAgICAgIC8vIFNpZ24KKyAgICBsb2dpYyAgICAgICBvOyAgICAgIC8vIE92ZXJmbG93CisgICAgbG9naWMgICAgICAgYzsgICAgICAvLyBDYXJyeQorfSB0eXBlX3NjcjFfaWFsdV9mbGFnc19zOworCisgYGlmZGVmIFNDUjFfUlZNX0VYVAordHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKKyAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFLAorICAgIFNDUjFfSUFMVV9NRFVfRlNNX0lURVIsCisgICAgU0NSMV9JQUxVX01EVV9GU01fQ09SUgorfSB0eXBlX3NjcjFfaWFsdV9mc21fc3RhdGU7CisKK3R5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7CisgICBTQ1IxX0lBTFVfTURVX05PTkUsCisgICBTQ1IxX0lBTFVfTURVX01VTCwKKyAgIFNDUjFfSUFMVV9NRFVfRElWCit9IHR5cGVfc2NyMV9pYWx1X21kdV9jbWQ7CisgYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBNYWluIGFkZGVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICBbYFNDUjFfWExFTjowXSAgICAgICAgICAgICAgICAgbWFpbl9zdW1fcmVzOyAgICAgICAvLyBNYWluIGFkZGVyIHJlc3VsdAordHlwZV9zY3IxX2lhbHVfZmxhZ3NfcyAgICAgICAgICAgICAgICAgICAgICBtYWluX3N1bV9mbGFnczsgICAgIC8vIE1haW4gYWRkZXIgZmxhZ3MKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9zdW1fcG9zX292Zmx3OyAvLyBNYWluIGFkZGVyIHBvc2l0aXZlIG92ZXJmbG93Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fc3VtX25lZ19vdmZsdzsgLy8gTWFpbiBhZGRlciBuZWdhdGl2ZSBvdmVyZmxvdworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX29wc19kaWZmX3NnbjsgIC8vIE1haW4gYWRkZXIgb3BlcmFuZHMgaGF2ZSBkaWZmZXJlbnQgc2lnbnMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9vcHNfbm9uX3plcm87ICAvLyBCb3RoIG1haW4gYWRkZXIgb3BlcmFuZHMgYXJlIE5PVCAwCisKKy8vIFNoaWZ0ZXIgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYWx1X2NtZF9zaGZ0OyAgICAgIC8vIElBTFUgY29tbWFuZCBpcyBzaGlmdAorbG9naWMgc2lnbmVkIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBzaGZ0X29wMTsgICAgICAgICAgIC8vIFNISUZUIG9wZXJhbmQgMQorbG9naWMgICAgICAgIFs0OjBdICAgICAgICAgICAgICAgICAgICAgICAgICBzaGZ0X29wMjsgICAgICAgICAgIC8vIFNISUZUIG9wZXJhbmQgMgorbG9naWMgICAgICAgIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBzaGZ0X2NtZDsgICAgICAgICAgIC8vIFNISUZUIGNvbW1hbmQ6IDAwIC0gbG9naWNhbCBsZWZ0LCAxMCAtIGxvZ2ljYWwgcmlnaHQsIDExIC0gYXJpdGhtZXRpY2FsIHJpZ2h0Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIHNoZnRfcmVzOyAgICAgICAgICAgLy8gU0hJRlQgcmVzdWx0CisKKy8vIE1VTC9ESVYgc2lnbmFscworYGlmZGVmIFNDUjFfUlZNX0VYVAorLy8gTVVML0RJViBGU00gY29udHJvbCBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9jbWRfaXNfaXRlcjsgICAgLy8gTURVIENvbW1hbmQgaXMgaXRlcmF0aXZlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9pdGVyX3JlcTsgICAgICAgLy8gUmVxdWVzdCBpdGVyYXRpdmUgc3RhZ2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2l0ZXJfcmR5OyAgICAgICAvLyBJdGVyYXRpb24gaXMgcmVhZHkKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2NvcnJfcmVxOyAgICAgICAvLyBESVYvUkVNKFUpIGNvcnJlY3Rpb24gcmVxdWVzdAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY29ycl9yZXE7ICAgICAgIC8vIENvcnJlY3Rpb24gcmVxdWVzdCBmb3IgRElWIG9wZXJhdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1fY29ycl9yZXE7ICAgICAgIC8vIENvcnJlY3Rpb24gcmVxdWVzdCBmb3IgUkVNKFUpIG9wZXJhdGlvbnMKKworLy8gTVVML0RJViBGU00gc2lnbmFscwordHlwZV9zY3IxX2lhbHVfZnNtX3N0YXRlICAgICAgICAgICAgICAgICAgICBtZHVfZnNtX2ZmOyAgICAgICAgIC8vIEN1cnJlbnQgRlNNIHN0YXRlCit0eXBlX3NjcjFfaWFsdV9mc21fc3RhdGUgICAgICAgICAgICAgICAgICAgIG1kdV9mc21fbmV4dDsgICAgICAgLy8gTmV4dCBGU00gc3RhdGUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2ZzbV9pZGxlOyAgICAgICAvLyBNRFUgRlNNIGlzIGluIElETEUgc3RhdGUKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfZnNtX2l0ZXI7ICAgICAgIC8vIE1EVSBGU00gaXMgaW4gSVRFUiBzdGF0ZQorYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9mc21fY29ycjsgICAgICAgLy8gTURVIEZTTSBpcyBpbiBDT1JSIHN0YXRlCisKKy8vIE1EVSBjb21tYW5kIHNpZ25hbHMKK3R5cGVfc2NyMV9pYWx1X21kdV9jbWQgICAgICAgICAgICAgICAgICAgICAgbWR1X2NtZDsgICAgICAgICAgICAvLyBNRFUgY29tbWFuZDogMDAgLSBOT05FLCAwMSAtIE1VTCwgIDEwIC0gRElWCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9jbWRfbXVsOyAgICAgICAgLy8gTURVIGNvbW1hbmQgaXMgTVVMKEhTVSkKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X2NtZF9kaXY7ICAgICAgICAvLyBNRFUgY29tbWFuZCBpcyBESVYoVSkvUkVNKFUpCitsb2dpYyAgICAgICAgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9jbWQ7ICAgICAgICAgICAgLy8gTVVMIGNvbW1hbmQ6IDAwIC0gTVVMLCAgMDEgLSBNVUxILCAxMCAtIE1VTEhTVSwgMTEgLSBNVUxIVQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWxfY21kX2hpOyAgICAgICAgIC8vIEhpZ2ggcGFydCBvZiBNVUwgcmVzdWx0IGlzIHJlcXVlc3RlZAorbG9naWMgICAgICAgIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY21kOyAgICAgICAgICAgIC8vIERJViBjb21tYW5kOiAwMCAtIERJViwgIDAxIC0gRElWVSwgMTAgLSBSRU0sICAgIDExIC0gUkVNVQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY21kX2RpdjsgICAgICAgIC8vIERJViBjb21tYW5kIGlzIERJVgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfY21kX3JlbTsgICAgICAgIC8vIERJViBjb21tYW5kIGlzIFJFTShVKQorCisvLyBNdWx0aXBsaWVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMV9pc19zZ247ICAgICAvLyBGaXJzdCBNVUwgb3BlcmFuZCBpcyBzaWduZWQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMl9pc19zZ247ICAgICAvLyBTZWNvbmQgTVVMIG9wZXJhbmQgaXMgc2lnbmVkCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bF9vcDFfc2duOyAgICAgICAgLy8gRmlyc3QgTVVMIG9wZXJhbmQgaXMgbmVnYXRpdmUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsX29wMl9zZ247ICAgICAgICAvLyBTZWNvbmQgTVVMIG9wZXJhbmQgaXMgbmVnYXRpdmUKK2xvZ2ljIHNpZ25lZCBbYFNDUjFfWExFTjowXSAgICAgICAgICAgICAgICAgbXVsX29wMTsgICAgICAgICAgICAvLyBNVUwgb3BlcmFuZCAxCitsb2dpYyBzaWduZWQgW1NDUjFfTVVMX1dJRFRIOjBdICAgICAgICAgICAgIG11bF9vcDI7ICAgICAgICAgICAgLy8gTVVMIG9wZXJhbmQgMQorIGBpZmRlZiBTQ1IxX0ZBU1RfTVVMCitsb2dpYyBzaWduZWQgW1NDUjFfTVVMX1JFU19XSURUSC0xOjBdICAgICAgIG11bF9yZXM7ICAgICAgICAgICAgLy8gTVVMIHJlc3VsdAorIGBlbHNlIC8vIH5TQ1IxX0ZBU1RfTVVMCitsb2dpYyBzaWduZWQgW1NDUjFfTURVX1NVTV9XSURUSDowXSAgICAgICAgIG11bF9wYXJ0X3Byb2Q7Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIG11bF9yZXNfaGk7Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIG11bF9yZXNfbG87CisgYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCisKKy8vIERpdmlzb3Igc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfb3BzX2FyZV9zZ247Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdl9vcDFfaXNfbmVnOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfb3AyX2lzX25lZzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X3Jlc19yZW1fYzsKK2xvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgZGl2X3Jlc19yZW07Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIGRpdl9yZXNfcXVvOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZfcXVvX2JpdDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2X2R2ZG5kX2xvX3VwZDsKK2xvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgZGl2X2R2ZG5kX2xvX2ZmOworbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBkaXZfZHZkbmRfbG9fbmV4dDsKKworLy8gTURVIGFkZGVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X3N1bV9zdWI7ICAgICAgICAvLyBNRFUgYWRkZXIgb3BlcmF0aW9uOiAwIC0gYWRkLCAxIC0gc3ViCitsb2dpYyBzaWduZWQgW1NDUjFfTURVX1NVTV9XSURUSC0xOjBdICAgICAgIG1kdV9zdW1fb3AxOyAgICAgICAgLy8gTURVIGFkZGVyIG9wZXJhbmQgMQorbG9naWMgc2lnbmVkIFtTQ1IxX01EVV9TVU1fV0lEVEgtMTowXSAgICAgICBtZHVfc3VtX29wMjsgICAgICAgIC8vIE1EVSBhZGRlciBvcGVyYW5kIDIKK2xvZ2ljIHNpZ25lZCBbU0NSMV9NRFVfU1VNX1dJRFRILTE6MF0gICAgICAgbWR1X3N1bV9yZXM7ICAgICAgICAvLyBNRFUgYWRkZXIgcmVzdWx0CisKKy8vIE1EVSBpdGVyYXRpb24gY291bnRlciBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9pdGVyX2NudF9lbjsKK2xvZ2ljICAgICAgICBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgbWR1X2l0ZXJfY250OworbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtZHVfaXRlcl9jbnRfbmV4dDsKKworLy8gSW50ZXJtZWRpYXRlIHJlc3VsdHMgcmVnaXN0ZXJzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9yZXNfdXBkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZHVfcmVzX2NfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kdV9yZXNfY19uZXh0OworbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtZHVfcmVzX2hpX2ZmOworbG9naWMgICAgICAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICBtZHVfcmVzX2hpX25leHQ7Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIG1kdV9yZXNfbG9fZmY7Citsb2dpYyAgICAgICAgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgIG1kdV9yZXNfbG9fbmV4dDsKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYWluIGFkZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gTWFpbiBhZGRlciBpcyB1c2VkIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9wZXJhdGlvbnM6CisgLy8gLSBBZGRpdGlvbi9zdWJ0cmFjdGlvbiAgICAgICAgICAoQUREL0FEREkvU1VCKQorIC8vIC0gQnJhbmNoIGNvbXBhcmlzb25zICAgICAgICAgICAgKEJFUS9CTkUvQkxUKFUpL0JHRShVKSkKKyAvLyAtIEFyaXRobWV0aWMgY29tcGFyaXNvbnMgICAgICAgIChTTFQoVSkvU0xUSShVKSkKKy8vCisKKy8vIENhcnJ5IG91dCAoTVNCIG9mIG1haW5fc3VtX3JlcykgaXMgZXZhbHVhdGVkIGNvcnJlY3RseSBiZWNhdXNlIHRoZSByZXN1bHQKKy8vIHdpZHRoIGVxdWFscyB0byB0aGUgbWF4aW11bSB3aWR0aCBvZiBib3RoIHRoZSByaWdodC1oYW5kIGFuZCBsZWZ0LWhhbmQgc2lkZSB2YXJpYWJsZXMKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgbWFpbl9zdW1fcmVzID0gKGV4dTJpYWx1X2NtZF9pICE9IFNDUjFfSUFMVV9DTURfQUREKQorICAgICAgICAgICAgICAgICA/IChleHUyaWFsdV9tYWluX29wMV9pIC0gZXh1MmlhbHVfbWFpbl9vcDJfaSkgICAvLyBTdWJ0cmFjdGlvbiBhbmQgY29tcGFyaXNvbgorICAgICAgICAgICAgICAgICA6IChleHUyaWFsdV9tYWluX29wMV9pICsgZXh1MmlhbHVfbWFpbl9vcDJfaSk7ICAvLyBBZGRpdGlvbgorCisgICAgbWFpbl9zdW1fcG9zX292Zmx3ID0gfmV4dTJpYWx1X21haW5fb3AxX2lbYFNDUjFfWExFTi0xXQorICAgICAgICAgICAgICAgICAgICAgICAmICBleHUyaWFsdV9tYWluX29wMl9pW2BTQ1IxX1hMRU4tMV0KKyAgICAgICAgICAgICAgICAgICAgICAgJiAgbWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMV07CisgICAgbWFpbl9zdW1fbmVnX292Zmx3ID0gIGV4dTJpYWx1X21haW5fb3AxX2lbYFNDUjFfWExFTi0xXQorICAgICAgICAgICAgICAgICAgICAgICAmIH5leHUyaWFsdV9tYWluX29wMl9pW2BTQ1IxX1hMRU4tMV0KKyAgICAgICAgICAgICAgICAgICAgICAgJiB+bWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMV07CisKKyAgICAvLyBGTEFHUzEgLSBmbGFncyBmb3IgY29tcGFyaXNvbiAocmVzdWx0IG9mIHN1YnRyYWN0aW9uKQorICAgIG1haW5fc3VtX2ZsYWdzLmMgPSBtYWluX3N1bV9yZXNbYFNDUjFfWExFTl07CisgICAgbWFpbl9zdW1fZmxhZ3MueiA9IH58bWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMTowXTsKKyAgICBtYWluX3N1bV9mbGFncy5zID0gbWFpbl9zdW1fcmVzW2BTQ1IxX1hMRU4tMV07CisgICAgbWFpbl9zdW1fZmxhZ3MubyA9IG1haW5fc3VtX3Bvc19vdmZsdyB8IG1haW5fc3VtX25lZ19vdmZsdzsKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFkZHJlc3MgYWRkZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBBZGRpdGlvbmFsIGFkZGVyIGlzIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2Ygb3BlcmF0aW9uczoKKyAvLyAtIFBDLWJhc2VkIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgICAgKEFVSVBDKQorIC8vIC0gSU1FTSBicmFuY2ggYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAoQkVRL0JORS9CTFQoVSkvQkdFKFUpKQorIC8vIC0gSU1FTSBqdW1wIGFkZHJlc3MgY2FsY3VsYXRpb24gICAgICAgICAoSkFML0pBTFIpCisgLy8gLSBETUVNIGxvYWQgYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAgIChMQihVKS9MSChVKS9MVykKKyAvLyAtIERNRU0gc3RvcmUgYWRkcmVzcyBjYWxjdWxhdGlvbiAgICAgICAgKFNCL1NIL1NXKQorLy8KKworYXNzaWduIGlhbHUyZXh1X2FkZHJfcmVzX28gPSBleHUyaWFsdV9hZGRyX29wMV9pICsgZXh1MmlhbHVfYWRkcl9vcDJfaTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaGlmdCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8KKyAvLyBTaGlmdCBsb2dpYyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIHNoaWZ0IG9wZXJhdGlvbnM6CisgLy8gLSBMb2dpY2FsIGxlZnQgc2hpZnQgICAgICAoU0xMSS9TTEwpCisgLy8gLSBMb2dpY2FsIHJpZ2h0IHNoaWZ0ICAgICAoU1JMSS9TUkwpCisgLy8gLSBBcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICAoU1JBSS9TUkEpCisvLworCithc3NpZ24gaWFsdV9jbWRfc2hmdCA9IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX1NMTCkKKyAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfU1JMKQorICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9TUkEpOworYXNzaWduIHNoZnRfY21kICAgICAgPSBpYWx1X2NtZF9zaGZ0CisgICAgICAgICAgICAgICAgICAgICA/IHsoZXh1MmlhbHVfY21kX2kgIT0gU0NSMV9JQUxVX0NNRF9TTEwpLAorICAgICAgICAgICAgICAgICAgICAgICAgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfU1JBKX0KKyAgICAgICAgICAgICAgICAgICAgIDogMidiMDA7CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgc2hmdF9vcDEgPSBleHUyaWFsdV9tYWluX29wMV9pOworICAgIHNoZnRfb3AyID0gZXh1MmlhbHVfbWFpbl9vcDJfaVs0OjBdOworICAgIGNhc2UgKHNoZnRfY21kKQorICAgICAgICAyJ2IxMCAgIDogc2hmdF9yZXMgPSBzaGZ0X29wMSAgPj4gc2hmdF9vcDI7CisgICAgICAgIDInYjExICAgOiBzaGZ0X3JlcyA9IHNoZnRfb3AxID4+PiBzaGZ0X29wMjsKKyAgICAgICAgZGVmYXVsdCA6IHNoZnRfcmVzID0gc2hmdF9vcDEgIDw8IHNoZnRfb3AyOworICAgIGVuZGNhc2UKK2VuZAorCitgaWZkZWYgU0NSMV9SVk1fRVhUCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1VTC9ESVYgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBNVUwvRElWIGluc3RydWN0aW9ucyB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgorIC8vIC0gTVVML0RJViBGU00gY29udHJvbCBsb2dpYywgaW5jbHVkaW5nIGl0ZXJhdGlvbiBudW1iZXIgY291bnRlcgorIC8vIC0gTVVML0RJViBGU00KKyAvLyAtIE1VTCBsb2dpYworIC8vIC0gRElWIGxvZ2ljCisgLy8gLSBNRFUgYWRkZXIgdG8gcHJvZHVjZSBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0CisgLy8gLSAyIHJlZ2lzdGVycyB0byBzYXZlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IChzaGFyZWQgYmV0d2VlbiBNVUwgYW5kIERJVgorIC8vICAgb3BlcmF0aW9ucykKKy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTVVML0RJViBGU00gQ29udHJvbCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBtZHVfY21kX2RpdiA9IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX0RJVikKKyAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX0RJVlUpCisgICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9SRU0pCisgICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9SRU1VKTsKK2Fzc2lnbiBtZHVfY21kX211bCA9IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTCkKKyAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEgpCisgICAgICAgICAgICAgICAgICAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9NVUxIVSkKKyAgICAgICAgICAgICAgICAgICB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEhTVSk7CisKK2Fzc2lnbiBtZHVfY21kICAgICA9IG1kdV9jbWRfZGl2ID8gU0NSMV9JQUxVX01EVV9ESVYKKyAgICAgICAgICAgICAgICAgICA6IG1kdV9jbWRfbXVsID8gU0NSMV9JQUxVX01EVV9NVUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JQUxVX01EVV9OT05FOworCithc3NpZ24gbWFpbl9vcHNfbm9uX3plcm8gPSB8ZXh1MmlhbHVfbWFpbl9vcDFfaSAmIHxleHUyaWFsdV9tYWluX29wMl9pOworYXNzaWduIG1haW5fb3BzX2RpZmZfc2duID0gZXh1MmlhbHVfbWFpbl9vcDFfaVtgU0NSMV9YTEVOLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgXiBleHUyaWFsdV9tYWluX29wMl9pW2BTQ1IxX1hMRU4tMV07CisKKyBgaWZkZWYgU0NSMV9GQVNUX01VTAorICAgIGFzc2lnbiBtZHVfY21kX2lzX2l0ZXIgPSBtZHVfY21kX2RpdjsKKyBgZWxzZSAvLyB+U0NSMV9GQVNUX01VTAorICAgIGFzc2lnbiBtZHVfY21kX2lzX2l0ZXIgPSBtZHVfY21kX211bCB8IG1kdV9jbWRfZGl2OworIGBlbmRpZiAvLyB+U0NSMV9GQVNUX01VTAorCithc3NpZ24gbWR1X2l0ZXJfcmVxID0gbWR1X2NtZF9pc19pdGVyID8gKG1haW5fb3BzX25vbl96ZXJvICYgbWR1X2ZzbV9pZGxlKSA6IDEnYjA7Cithc3NpZ24gbWR1X2l0ZXJfcmR5ID0gbWR1X2l0ZXJfY250WzBdOworCithc3NpZ24gZGl2X2NtZF9kaXYgPSAoZGl2X2NtZCA9PSAyJ2IwMCk7Cithc3NpZ24gZGl2X2NtZF9yZW0gPSBkaXZfY21kWzFdOworCisvLyBDb3JyZWN0aW9uIHJlcXVlc3Qgc2lnbmFscworYXNzaWduIGRpdl9jb3JyX3JlcSA9IGRpdl9jbWRfZGl2ICYgbWFpbl9vcHNfZGlmZl9zZ247Cithc3NpZ24gcmVtX2NvcnJfcmVxID0gZGl2X2NtZF9yZW0gJiB8ZGl2X3Jlc19yZW0gJiAoZGl2X29wMV9pc19uZWcgXiBkaXZfcmVzX3JlbV9jKTsKK2Fzc2lnbiBtZHVfY29ycl9yZXEgPSBtZHVfY21kX2RpdiAmIChkaXZfY29ycl9yZXEgfCByZW1fY29ycl9yZXEpOworCisvLyBNRFUgaXRlcmF0aW9uIGNvdW50ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBtZHVfaXRlcl9jbnRfZW4gPSBleHUyaWFsdV9ydm1fY21kX3ZkX2kgJiB+aWFsdTJleHVfcnZtX3Jlc19yZHlfbzsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKG1kdV9pdGVyX2NudF9lbikgYmVnaW4KKyAgICAgICAgbWR1X2l0ZXJfY250IDw9IG1kdV9pdGVyX2NudF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBtZHVfaXRlcl9jbnRfbmV4dCA9IH5tZHVfZnNtX2lkbGUgPyBtZHVfaXRlcl9jbnQgPj4gMQorICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2NtZF9kaXYgICA/IFNDUjFfRElWX0NOVF9JTklUCisgYGlmbmRlZiBTQ1IxX0ZBU1RfTVVMCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfY21kX211bCAgID8gU0NSMV9NVUxfQ05UX0lOSVQKKyBgZW5kaWYgLy8gflNDUjFfRkFTVF9NVUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfaXRlcl9jbnQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTVVML0RJViBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBtZHVfZnNtX2ZmIDw9IFNDUjFfSUFMVV9NRFVfRlNNX0lETEU7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgbWR1X2ZzbV9mZiA8PSBtZHVfZnNtX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBtZHVfZnNtX25leHQgPSBTQ1IxX0lBTFVfTURVX0ZTTV9JRExFOworCisgICAgaWYgKGV4dTJpYWx1X3J2bV9jbWRfdmRfaSkgYmVnaW4KKyAgICAgICAgY2FzZSAobWR1X2ZzbV9mZikKKyAgICAgICAgICAgIFNDUjFfSUFMVV9NRFVfRlNNX0lETEUgOiBiZWdpbgorICAgICAgICAgICAgICAgIG1kdV9mc21fbmV4dCA9IG1kdV9pdGVyX3JlcSAgPyBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUFMVV9NRFVfRlNNX0lETEU7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfSUFMVV9NRFVfRlNNX0lURVIgOiBiZWdpbgorICAgICAgICAgICAgICAgIG1kdV9mc21fbmV4dCA9IH5tZHVfaXRlcl9yZHkgPyBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2NvcnJfcmVxICA/IFNDUjFfSUFMVV9NRFVfRlNNX0NPUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JQUxVX01EVV9GU01fSURMRTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fQ09SUiA6IGJlZ2luCisgICAgICAgICAgICAgICAgbWR1X2ZzbV9uZXh0ID0gU0NSMV9JQUxVX01EVV9GU01fSURMRTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYXNzaWduIG1kdV9mc21faWRsZSA9IChtZHVfZnNtX2ZmID09IFNDUjFfSUFMVV9NRFVfRlNNX0lETEUpOworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCithc3NpZ24gbWR1X2ZzbV9pdGVyID0gKG1kdV9mc21fZmYgPT0gU0NSMV9JQUxVX01EVV9GU01fSVRFUik7CitgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KK2Fzc2lnbiBtZHVfZnNtX2NvcnIgPSAobWR1X2ZzbV9mZiA9PSBTQ1IxX0lBTFVfTURVX0ZTTV9DT1JSKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNdWx0aXBsaWVyIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gTXVsdGlwbGljYXRpb24gaGFzIDIgb3B0aW9uczogZmFzdCAoMSBjeWNsZSkgYW5kIFJhZGl4LTIgKDMyIGN5Y2xlcykgbXVsdGlwbGljYXRpb24uCisgLy8KKyAvLyAxLiBGYXN0IG11bHRpcGxpY2F0aW9uIHVzZXMgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCB3aGVuIDIgb3BlcmFuZHMgYXJlCisgLy8gbXVsdGlwbGllZCBpbiBvbmUgY3ljbGUKKyAvLworIC8vIDIuIFJhZGl4LTIgbXVsdGlwbGljYXRpb24gdXNlcyAyIHJlZ2lzdGVycyAoaGlnaCBhbmQgbG93IHBhcnQgb2YgbXVsdGlwbGljYXRpb24pCisgLy8KKyAvLyBSYWRpeC0yIGFsZ29yaXRobToKKyAvLyAxLiBJbml0aWFsaXplIHJlZ2lzdGVycworIC8vIDIuIENyZWF0ZSBhIHBhcnRpYWwgcHJvZHVjdCBieSBtdWx0aXBseWluZyBtdWx0aXBsaWNhbmQgYnkgdGhlIExTQiBvZiBtdWx0aXBsaWVyCisgLy8gMy4gQWRkIHRoZSBwYXJ0aWFsIHByb2R1Y3QgdG8gdGhlIHByZXZpb3VzIChpbnRlcm1lZGlhdGUpIHZhbHVlIG9mIG11bHRpcGxpY2F0aW9uCisgLy8gICAgcmVzdWx0IChzdG9yZWQgaW50byBoaWdoIGFuZCBsb3cgcGFydHMgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0IHJlZ2lzdGVyKQorIC8vIDQuIFNoaWZ0IHRoZSBsb3cgcGFydCBvZiBtdWx0aXBsaWNhdGlvbiByZXN1bHQgcmVnaXN0ZXIgcmlnaHQKKyAvLyA0LiBTdG9yZSB0aGUgYWRkaXRpb24gcmVzdWx0IGludG8gdGhlIGhpZ2ggcGFydCBvZiBtdWx0aXBsaWNhdGlvbiByZXN1bHQgcmVnaXN0ZXIKKyAvLyA2LiBJZiBpdGVyYXRpb24gaXMgbm90IHJlYWR5LCBnbyB0byBzdGVwIDIuIE90aGVyd2lzZSBtdWx0aXBsaWNhdGlvbiBpcyBkb25lCisgLy8KKy8vCisKK2Fzc2lnbiBtdWxfY21kICA9IHsoKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfTVVMSFUpIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfTVVMSFNVKSksCisgICAgICAgICAgICAgICAgICAgKChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEhVKSB8IChleHUyaWFsdV9jbWRfaSA9PSBTQ1IxX0lBTFVfQ01EX01VTEgpKX07CisKK2Fzc2lnbiBtdWxfY21kX2hpICAgICA9IHxtdWxfY21kOworYXNzaWduIG11bF9vcDFfaXNfc2duID0gfiZtdWxfY21kOworYXNzaWduIG11bF9vcDJfaXNfc2duID0gfm11bF9jbWRbMV07Cithc3NpZ24gbXVsX29wMV9zZ24gICAgPSBtdWxfb3AxX2lzX3NnbiAmIGV4dTJpYWx1X21haW5fb3AxX2lbYFNDUjFfWExFTi0xXTsKK2Fzc2lnbiBtdWxfb3AyX3NnbiAgICA9IG11bF9vcDJfaXNfc2duICYgZXh1MmlhbHVfbWFpbl9vcDJfaVtgU0NSMV9YTEVOLTFdOworCitgaWZkZWYgU0NSMV9GQVNUX01VTAorYXNzaWduIG11bF9vcDEgPSBtZHVfY21kX211bCA/ICRzaWduZWQoe211bF9vcDFfc2duLCBleHUyaWFsdV9tYWluX29wMV9pfSkgOiAnMDsKK2Fzc2lnbiBtdWxfb3AyID0gbWR1X2NtZF9tdWwgPyAkc2lnbmVkKHttdWxfb3AyX3NnbiwgZXh1MmlhbHVfbWFpbl9vcDJfaX0pIDogJzA7Cithc3NpZ24gbXVsX3JlcyA9IG1kdV9jbWRfbXVsID8gbXVsX29wMSAqIG11bF9vcDIgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdzYjA7CitgZWxzZSAvLyB+U0NSMV9GQVNUX01VTAorYXNzaWduIG11bF9vcDEgPSBtZHVfY21kX211bCAgPyAkc2lnbmVkKHttdWxfb3AxX3NnbiwgZXh1MmlhbHVfbWFpbl9vcDFfaX0pIDogJzA7Cithc3NpZ24gbXVsX29wMiA9IH5tZHVfY21kX211bCA/ICcwCisgICAgICAgICAgICAgICA6IG1kdV9mc21faWRsZSA/ICRzaWduZWQoezEnYjAsIGV4dTJpYWx1X21haW5fb3AyX2lbU0NSMV9NVUxfV0lEVEgtMTowXX0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRzaWduZWQoeyhtZHVfaXRlcl9jbnRbMF0gJiBtdWxfb3AyX2lzX3NnbiAmIG1kdV9yZXNfbG9fZmZbU0NSMV9NVUxfV0lEVEgtMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWR1X3Jlc19sb19mZltTQ1IxX01VTF9XSURUSC0xOjBdfSk7CisKK2Fzc2lnbiBtdWxfcGFydF9wcm9kICAgICAgICAgICAgPSBtZHVfY21kX211bCAgPyBtdWxfb3AxICogbXVsX29wMiA6ICdzYjA7Cithc3NpZ24ge211bF9yZXNfaGksIG11bF9yZXNfbG99ID0gfm1kdV9jbWRfbXVsID8gJzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfZnNtX2lkbGUgPyAoe21kdV9zdW1fcmVzLCBleHUyaWFsdV9tYWluX29wMl9pW2BTQ1IxX1hMRU4tMTpTQ1IxX01VTF9XSURUSF19KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh7bWR1X3N1bV9yZXMsIG1kdV9yZXNfbG9fZmZbYFNDUjFfWExFTi0xOlNDUjFfTVVMX1dJRFRIXX0pOworYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGl2aWRlciBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIERpdmlzaW9uIHVzZXMgYSBub24tcmVzdG9yaW5nIGFsZ29yaXRobS4gMyByZWdpc3RlcnMgYXJlIHVzZWQ6CisgLy8gLSBSZW1haW5kZXIgcmVnaXN0ZXIKKyAvLyAtIFF1b3RpZW50IHJlZ2lzdGVyCisgLy8gLSBEaXZpZGVuZCBsb3cgcGFydCByZWdpc3RlciAoZm9yIGNvcm5lciBjYXNlIHF1b3RpZW50IGJpdCBjYWxjdWxhdGlvbikKKyAvLworIC8vIEFsZ29yaXRobToKKyAvLyAxLiBJbml0aWFsaXplIHJlZ2lzdGVycworIC8vIDIuIFNoaWZ0IHJlbWFpbmRlciBhbmQgZGl2aWRlbmQgbG93IHBhcnQgcmVnaXN0ZXJzIGxlZnQKKyAvLyAzLiBDb21wYXJlIHJlbWFpbmRlciByZWdpc3RlciB3aXRoIHRoZSBkaXZpc29yICh0YWtpbmcgcHJldmlvdXMgcXVvdGllbnQgYml0CisgLy8gICAgYW5kIG9wZXJhbmRzIHNpZ25zIGludG8gYWNjb3VudCkgYW5kIGNhbGN1bGF0ZSBxdW90aWVudCBiaXQgYmFzZWQgb24gdGhlCisgLy8gICAgY29tcGFyaXNvbiByZXN1bHRzCisgLy8gNC4gU2hpZnQgcXVvdGllbnQgcmVnaXN0ZXIgbGVmdCwgYXBwZW5kIHF1b3RpZW50IGJpdCB0byB0aGUgcXVvdGllbnQgcmVnaXN0ZXIKKyAvLyA1LiBJZiBpdGVyYXRpb24gaXMgbm90IHJlYWR5LCBnbyB0byBzdGVwIDIuIE90aGVyd2lzZSBnbyB0byBzdGVwIDYKKyAvLyA2LiBEbyBjb3JyZWN0aW9uIGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGRpdmlzaW9uIGlzIGRvbmUKKyAvLworIC8vIFF1b3RpZW50IGJpdCBjYWxjdWxhdGlvbiBoYXMgYSBjb3JuZXIgY2FzZToKKyAvLyBXaGVuIGRpdmlkZW5kIGlzIG5lZ2F0aXZlIHJlc3VsdCBjYXJyeSBiaXQgY2hlY2sgdGFrZXMgaW50byBhY2NvdW50IG9ubHkKKyAvLyB0aGUgY2FzZSBvZiByZW1haW5kZXIgcmVnaXN0ZXIgYmVlbiBncmVhdGVyIHRoYW4gZGl2aXNvci4gVG8gaGFuZGxlCisgLy8gZXF1YWxpdHkgY2FzZSB3ZSBzaG91bGQgY2hlY2sgaWYgYm90aCB0aGUgY29tcGFyaXNvbiByZXN1bHQgYW5kIHRoZQorIC8vIGxvd2VyIHBhcnQgb2YgZGl2aWRlbmQgYXJlIHplcm8KKy8vCisKK2Fzc2lnbiBkaXZfY21kICA9IHsoKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfUkVNKSAgIHwgKGV4dTJpYWx1X2NtZF9pID09IFNDUjFfSUFMVV9DTURfUkVNVSkpLAorICAgICAgICAgICAgICAgICAgICgoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9SRU1VKSAgfCAoZXh1MmlhbHVfY21kX2kgPT0gU0NSMV9JQUxVX0NNRF9ESVZVKSl9OworCithc3NpZ24gZGl2X29wc19hcmVfc2duID0gfmRpdl9jbWRbMF07Cithc3NpZ24gZGl2X29wMV9pc19uZWcgID0gZGl2X29wc19hcmVfc2duICYgZXh1MmlhbHVfbWFpbl9vcDFfaVtgU0NSMV9YTEVOLTFdOworYXNzaWduIGRpdl9vcDJfaXNfbmVnICA9IGRpdl9vcHNfYXJlX3NnbiAmIGV4dTJpYWx1X21haW5fb3AyX2lbYFNDUjFfWExFTi0xXTsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBkaXZfcmVzX3JlbV9jID0gJzA7CisgICAgZGl2X3Jlc19yZW0gICA9ICcwOworICAgIGRpdl9yZXNfcXVvICAgPSAnMDsKKyAgICBkaXZfcXVvX2JpdCAgID0gMSdiMDsKKyAgICBpZiAobWR1X2NtZF9kaXYgJiB+bWR1X2ZzbV9jb3JyKSBiZWdpbgorICAgICAgICBkaXZfcmVzX3JlbV9jID0gbWR1X3N1bV9yZXNbU0NSMV9NRFVfU1VNX1dJRFRILTFdOworICAgICAgICBkaXZfcmVzX3JlbSAgID0gbWR1X3N1bV9yZXNbU0NSMV9NRFVfU1VNX1dJRFRILTI6MF07CisgICAgICAgIGRpdl9xdW9fYml0ICAgPSB+KGRpdl9vcDFfaXNfbmVnIF4gZGl2X3Jlc19yZW1fYykKKyAgICAgICAgICAgICAgICAgICAgICB8IChkaXZfb3AxX2lzX25lZyAmICh7bWR1X3N1bV9yZXMsIGRpdl9kdmRuZF9sb19uZXh0fSA9PSAnMCkpOworICAgICAgICBkaXZfcmVzX3F1byAgID0gbWR1X2ZzbV9pZGxlCisgICAgICAgICAgICAgICAgICAgICAgPyB7JzAsIGRpdl9xdW9fYml0fQorICAgICAgICAgICAgICAgICAgICAgIDoge21kdV9yZXNfbG9fZmZbYFNDUjFfWExFTi0yOjBdLCBkaXZfcXVvX2JpdH07CisgICAgZW5kCitlbmQKKworLy8gRGl2aWRlbmQgbG93IHBhcnQgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBkaXZfZHZkbmRfbG9fdXBkID0gZXh1MmlhbHVfcnZtX2NtZF92ZF9pICYgfmlhbHUyZXh1X3J2bV9yZXNfcmR5X287CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChkaXZfZHZkbmRfbG9fdXBkKSBiZWdpbgorICAgICAgICBkaXZfZHZkbmRfbG9fZmYgPD0gZGl2X2R2ZG5kX2xvX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIGRpdl9kdmRuZF9sb19uZXh0ID0gKH5tZHVfY21kX2RpdiB8IG1kdV9mc21fY29ycikgPyAnMAorICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X2ZzbV9pZGxlICAgICAgICAgICAgICAgICAgPyBleHUyaWFsdV9tYWluX29wMV9pIDw8IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGl2X2R2ZG5kX2xvX2ZmICAgICA8PCAxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1EVSBhZGRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgbWR1X3N1bV9zdWIgICAgPSAxJ2IwOworICAgIG1kdV9zdW1fb3AxICAgID0gJzA7CisgICAgbWR1X3N1bV9vcDIgICAgPSAnMDsKKyAgICBjYXNlIChtZHVfY21kKQorICAgICAgICBTQ1IxX0lBTFVfTURVX0RJViA6IGJlZ2luCisgICAgICAgICAgICBsb2dpYyAgICAgICAgICAgc2duOworICAgICAgICAgICAgbG9naWMgICAgICAgICAgIGludjsKKworICAgICAgICAgICAgc2duICAgICAgICAgPSBtZHVfZnNtX2NvcnIgPyBkaXZfb3AxX2lzX25lZyBeIG1kdV9yZXNfY19mZgorICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfZnNtX2lkbGUgPyAxJ2IwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5tZHVfcmVzX2xvX2ZmWzBdOworICAgICAgICAgICAgaW52ICAgICAgICAgPSBkaXZfb3BzX2FyZV9zZ24gJiBtYWluX29wc19kaWZmX3NnbjsKKyAgICAgICAgICAgIG1kdV9zdW1fc3ViID0gfmludiBeIHNnbjsKKyAgICAgICAgICAgIG1kdV9zdW1fb3AxID0gbWR1X2ZzbV9jb3JyID8gJHNpZ25lZCh7MSdiMCwgbWR1X3Jlc19oaV9mZn0pCisgICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9mc21faWRsZSA/ICRzaWduZWQoe2Rpdl9vcDFfaXNfbmVnLCBleHUyaWFsdV9tYWluX29wMV9pW2BTQ1IxX1hMRU4tMV19KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkc2lnbmVkKHttZHVfcmVzX2hpX2ZmLCBkaXZfZHZkbmRfbG9fZmZbYFNDUjFfWExFTi0xXX0pOworICAgICAgICAgICAgbWR1X3N1bV9vcDIgPSAkc2lnbmVkKHtkaXZfb3AyX2lzX25lZywgZXh1MmlhbHVfbWFpbl9vcDJfaX0pOworICAgICAgICBlbmQKK2BpZm5kZWYgU0NSMV9GQVNUX01VTAorICAgICAgICBTQ1IxX0lBTFVfTURVX01VTCA6IGJlZ2luCisgICAgICAgICAgICBtZHVfc3VtX29wMSA9IG1kdV9mc21faWRsZQorICAgICAgICAgICAgICAgICAgICAgICAgPyAnMAorICAgICAgICAgICAgICAgICAgICAgICAgOiAkc2lnbmVkKHsobXVsX29wMV9pc19zZ24gJiBtZHVfcmVzX2hpX2ZmW2BTQ1IxX1hMRU4tMV0pLCBtZHVfcmVzX2hpX2ZmfSk7CisgICAgICAgICAgICBtZHVfc3VtX29wMiA9IG11bF9wYXJ0X3Byb2Q7CisgICAgICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfRkFTVF9NVUwKKyAgICAgICAgZGVmYXVsdCA6IGJlZ2luIGVuZAorICAgIGVuZGNhc2UKKyAgICBtZHVfc3VtX3JlcyA9IG1kdV9zdW1fc3ViCisgICAgICAgICAgICAgICAgPyAobWR1X3N1bV9vcDEgLSBtZHVfc3VtX29wMikKKyAgICAgICAgICAgICAgICA6IChtZHVfc3VtX29wMSArIG1kdV9zdW1fb3AyKTsKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1VTC9ESVYgaW50ZXJtZWRpYXRlIHJlc3VsdHMgcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIG1kdV9yZXNfdXBkID0gZXh1MmlhbHVfcnZtX2NtZF92ZF9pICYgfmlhbHUyZXh1X3J2bV9yZXNfcmR5X287CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChtZHVfcmVzX3VwZCkgYmVnaW4KKyAgICAgICAgbWR1X3Jlc19jX2ZmICA8PSBtZHVfcmVzX2NfbmV4dDsKKyAgICAgICAgbWR1X3Jlc19oaV9mZiA8PSBtZHVfcmVzX2hpX25leHQ7CisgICAgICAgIG1kdV9yZXNfbG9fZmYgPD0gbWR1X3Jlc19sb19uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBtZHVfcmVzX2NfbmV4dCAgPSBtZHVfY21kX2RpdiA/IGRpdl9yZXNfcmVtX2MgOiBtZHVfcmVzX2NfZmY7Cithc3NpZ24gbWR1X3Jlc19oaV9uZXh0ID0gbWR1X2NtZF9kaXYgPyBkaXZfcmVzX3JlbQorIGBpZm5kZWYgU0NSMV9GQVNUX01VTAorICAgICAgICAgICAgICAgICAgICAgICA6IG1kdV9jbWRfbXVsID8gbXVsX3Jlc19oaQorIGBlbmRpZiAvLyBTQ1IxX0ZBU1RfTVVMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfcmVzX2hpX2ZmOworYXNzaWduIG1kdV9yZXNfbG9fbmV4dCA9IG1kdV9jbWRfZGl2ID8gZGl2X3Jlc19xdW8KKyBgaWZuZGVmIFNDUjFfRkFTVF9NVUwKKyAgICAgICAgICAgICAgICAgICAgICAgOiBtZHVfY21kX211bCA/IG11bF9yZXNfbG8KKyBgZW5kaWYgLy8gU0NSMV9GQVNUX01VTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWR1X3Jlc19sb19mZjsKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBPcGVyYXRpb24gcmVzdWx0IGZvcm1pbmcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAnMDsKKyAgICBpYWx1MmV4dV9jbXBfcmVzX28gICAgID0gMSdiMDsKK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vID0gMSdiMTsKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKworICAgIGNhc2UgKGV4dTJpYWx1X2NtZF9pKQorICAgICAgICBTQ1IxX0lBTFVfQ01EX0FORCA6IGJlZ2luCisgICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gZXh1MmlhbHVfbWFpbl9vcDFfaSAmIGV4dTJpYWx1X21haW5fb3AyX2k7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0lBTFVfQ01EX09SIDogYmVnaW4KKyAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBleHUyaWFsdV9tYWluX29wMV9pIHwgZXh1MmlhbHVfbWFpbl9vcDJfaTsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfSUFMVV9DTURfWE9SIDogYmVnaW4KKyAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBleHUyaWFsdV9tYWluX29wMV9pIF4gZXh1MmlhbHVfbWFpbl9vcDJfaTsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfSUFMVV9DTURfQUREIDogYmVnaW4KKyAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBtYWluX3N1bV9yZXNbYFNDUjFfWExFTi0xOjBdOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUIgOiBiZWdpbgorICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IG1haW5fc3VtX3Jlc1tgU0NSMV9YTEVOLTE6MF07CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9MVCA6IGJlZ2luCisgICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicobWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pOworICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfTFRVIDogYmVnaW4KKyAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBgU0NSMV9YTEVOJyhtYWluX3N1bV9mbGFncy5jKTsKKyAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfbyAgPSBtYWluX3N1bV9mbGFncy5jOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfRVEgOiBiZWdpbgorICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IGBTQ1IxX1hMRU4nKG1haW5fc3VtX2ZsYWdzLnopOworICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IG1haW5fc3VtX2ZsYWdzLno7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0lBTFVfQ01EX1NVQl9ORSA6IGJlZ2luCisgICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLnopOworICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IH5tYWluX3N1bV9mbGFncy56OworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9TVUJfR0UgOiBiZWdpbgorICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IGBTQ1IxX1hMRU4nKH4obWFpbl9zdW1fZmxhZ3MucyBeIG1haW5fc3VtX2ZsYWdzLm8pKTsKKyAgICAgICAgICAgIGlhbHUyZXh1X2NtcF9yZXNfbyAgPSB+KG1haW5fc3VtX2ZsYWdzLnMgXiBtYWluX3N1bV9mbGFncy5vKTsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfSUFMVV9DTURfU1VCX0dFVSA6IGJlZ2luCisgICAgICAgICAgICBpYWx1MmV4dV9tYWluX3Jlc19vID0gYFNDUjFfWExFTicofm1haW5fc3VtX2ZsYWdzLmMpOworICAgICAgICAgICAgaWFsdTJleHVfY21wX3Jlc19vICA9IH5tYWluX3N1bV9mbGFncy5jOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9TTEwsCisgICAgICAgIFNDUjFfSUFMVV9DTURfU1JMLAorICAgICAgICBTQ1IxX0lBTFVfQ01EX1NSQTogYmVnaW4KKyAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gPSBzaGZ0X3JlczsKKyAgICAgICAgZW5kCitgaWZkZWYgU0NSMV9SVk1fRVhUCisgICAgICAgIFNDUjFfSUFMVV9DTURfTVVMLAorICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhVLAorICAgICAgICBTQ1IxX0lBTFVfQ01EX01VTEhTVSwKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9NVUxIIDogYmVnaW4KKyBgaWZkZWYgU0NSMV9GQVNUX01VTAorICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyA9IG11bF9jbWRfaGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdWxfcmVzW1NDUjFfTVVMX1JFU19XSURUSC0xOmBTQ1IxX1hMRU5dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXVsX3Jlc1tgU0NSMV9YTEVOLTE6MF07CisgYGVsc2UgLy8gflNDUjFfRkFTVF9NVUwKKyAgICAgICAgICAgIGNhc2UgKG1kdV9mc21fZmYpCisgICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSURMRSA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAnMDsKKyAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfbyA9IH5tZHVfaXRlcl9yZXE7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSVRFUiA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSBtdWxfY21kX2hpID8gbXVsX3Jlc19oaSA6IG11bF9yZXNfbG87CisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28gPSBtZHVfaXRlcl9yZHk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgYGVuZGlmIC8vIH5TQ1IxX0ZBU1RfTVVMCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0lBTFVfQ01EX0RJViwKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9ESVZVLAorICAgICAgICBTQ1IxX0lBTFVfQ01EX1JFTSwKKyAgICAgICAgU0NSMV9JQUxVX0NNRF9SRU1VIDogYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKG1kdV9mc21fZmYpCisgICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fSURMRSA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSAofGV4dTJpYWx1X21haW5fb3AyX2kgfCBkaXZfY21kX3JlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGV4dTJpYWx1X21haW5fb3AxX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxOworICAgICAgICAgICAgICAgICAgICBpYWx1MmV4dV9ydm1fcmVzX3JkeV9vID0gfm1kdV9pdGVyX3JlcTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBTQ1IxX0lBTFVfTURVX0ZTTV9JVEVSIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfbWFpbl9yZXNfbyAgICA9IGRpdl9jbWRfcmVtID8gZGl2X3Jlc19yZW0gOiBkaXZfcmVzX3F1bzsKKyAgICAgICAgICAgICAgICAgICAgaWFsdTJleHVfcnZtX3Jlc19yZHlfbyA9IG1kdV9pdGVyX3JkeSAmIH5tZHVfY29ycl9yZXE7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgU0NSMV9JQUxVX01EVV9GU01fQ09SUiA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X21haW5fcmVzX28gICAgPSBkaXZfY21kX3JlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWR1X3N1bV9yZXNbYFNDUjFfWExFTi0xOjBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtbWR1X3Jlc19sb19mZltgU0NSMV9YTEVOLTE6MF07CisgICAgICAgICAgICAgICAgICAgIGlhbHUyZXh1X3J2bV9yZXNfcmR5X28gPSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICBlbmQKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKyAgICAgICAgZGVmYXVsdCA6IGJlZ2luIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaWZkZWYgU0NSMV9SVk1fRVhUCisKKy8vIFggY2hlY2tzCisKK1NDUjFfU1ZBX0lBTFVfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHtleHUyaWFsdV9ydm1fY21kX3ZkX2ksIG1kdV9mc21fZmZ9KQorICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IHVua25vd24gdmFsdWVzIik7CisKK1NDUjFfU1ZBX0lBTFVfWENIRUNLX1FVRVVFIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGV4dTJpYWx1X3J2bV9jbWRfdmRfaSB8LT4KKyAgICAhJGlzdW5rbm93bih7ZXh1MmlhbHVfbWFpbl9vcDFfaSwgZXh1MmlhbHVfbWFpbl9vcDJfaSwgZXh1MmlhbHVfY21kX2l9KQorICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IHVua25vd24gdmFsdWVzIGluIHF1ZXVlIik7CisKKy8vIEJlaGF2aW9yIGNoZWNrcworCitTQ1IxX1NWQV9JQUxVX0lMTF9TVEFURSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAkb25laG90MCh7fmV4dTJpYWx1X3J2bV9jbWRfdmRfaSwgbWR1X2ZzbV9pdGVyLCBtZHVfZnNtX2NvcnJ9KQorICAgICkgZWxzZSAkZXJyb3IoIklBTFUgRXJyb3I6IGlsbGVnYWwgc3RhdGUiKTsKKworU0NSMV9TVkFfSUFMVV9KVU1QX0ZST01fSURMRSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAobWR1X2ZzbV9pZGxlICYgKH5leHUyaWFsdV9ydm1fY21kX3ZkX2kgfCB+bWR1X2l0ZXJfcmVxKSkgfD0+IG1kdV9mc21faWRsZQorICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogaWxsZWdhbCBqdW1wIGZyb20gSURMRSBzdGF0ZSIpOworCitTQ1IxX1NWQV9JQUxVX0lETEVfVE9fSVRFUiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAobWR1X2ZzbV9pZGxlICYgZXh1MmlhbHVfcnZtX2NtZF92ZF9pICYgbWR1X2l0ZXJfcmVxKSB8PT4gbWR1X2ZzbV9pdGVyCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIGNoYW5nZSBzdGF0ZSBmb3JtIElETEUgdG8gSVRFUiIpOworCitTQ1IxX1NWQV9JQUxVX0pVTVBfRlJPTV9JVEVSIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIChtZHVfZnNtX2l0ZXIgJiB+bWR1X2l0ZXJfcmR5KSB8PT4gbWR1X2ZzbV9pdGVyCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIGp1bXAgZnJvbSBJVEVSIHN0YXRlIik7CisKK1NDUjFfU1ZBX0lBTFVfSVRFUl9UT19JRExFIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIChtZHVfZnNtX2l0ZXIgJiBtZHVfaXRlcl9yZHkgJiB+bWR1X2NvcnJfcmVxKSB8PT4gbWR1X2ZzbV9pZGxlCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIHN0YXRlIGNoYW5nZSBJVEVSIHRvIElETEUiKTsKKworU0NSMV9TVkFfSUFMVV9JVEVSX1RPX0NPUlIgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgKG1kdV9mc21faXRlciAmIG1kdV9pdGVyX3JkeSAmIG1kdV9jb3JyX3JlcSkgfD0+IG1kdV9mc21fY29ycgorICAgICkgZWxzZSAkZXJyb3IoIkVYVSBFcnJvcjogaWxsZWdhbCBzdGF0ZSBjaGFuZ2UgSVRFUiB0byBDT1JSIik7CisKK1NDUjFfU1ZBX0lBTFVfQ09SUl9UT19JRExFIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIG1kdV9mc21fY29yciB8PT4gbWR1X2ZzbV9pZGxlCisgICAgKSBlbHNlICRlcnJvcigiRVhVIEVycm9yOiBpbGxlZ2FsIHN0YXRlIHN0YXkgaW4gQ09SUiIpOworCitgZW5kaWYgLy8gU0NSMV9SVk1fRVhUCisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfaWFsdQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lkdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxZGFjZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZHUuc3YKQEAgLTAsMCArMSw4NzYgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pZHUuc3Y+CisvLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gRGVjb2RlciBVbml0IChJRFUpCisvLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIEZ1bmN0aW9uYWxpdHk6CisgLy8gLSBEZWNvZGVzIHRoZSBpbnN0cnVjdGlvbiBhbmQgY3JlYXRlcyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBzaWduYWxzIGZvciBFWFUKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIEluc3RydWN0aW9uIGRlY29kZXIKKyAvLyAtIElEVSA8LT4gSUZVIGkvZgorIC8vIC0gSURVIDwtPiBFWFUgaS9mCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKK2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgorYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCittb2R1bGUgc2NyMV9waXBlX2lkdQorKAorYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIElEVSByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAvLyBJRFUgY2xvY2sKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCisgICAgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5X28sICAgICAgICAgIC8vIElEVSByZWFkeSBmb3IgbmV3IGRhdGEKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaWZ1MmlkdV9pbnN0cl9pLCAgICAgICAgLy8gSUZVIGluc3RydWN0aW9uCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfaSwgICAgIC8vIEluc3RydWN0aW9uIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX2ksICAgLy8gMSAtIGltZW0gZmF1bHQgd2hlbiB0cnlpbmcgdG8gZmV0Y2ggc2Vjb25kIGhhbGYgb2YgYW4gdW5hbGlnbmVkIFJWSSBpbnN0cnVjdGlvbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX2ksICAgICAgICAgICAvLyBJRlUgcmVxdWVzdAorCisgICAgLy8gSURVIDwtPiBFWFUgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfcmVxX28sICAgICAgICAgIC8vIElEVSByZXF1ZXN0CisgICAgb3V0cHV0ICB0eXBlX3NjcjFfZXh1X2NtZF9zICAgICAgICAgICAgIGlkdTJleHVfY21kX28sICAgICAgICAgIC8vIElEVSBjb21tYW5kCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMxCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMl9vLCAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcnMyCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28sICAgICAgIC8vIEluc3RydWN0aW9uIHVzZXMgcmQKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28sICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyBpbW1lZGlhdGUKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmlkdV9yZHlfaSAgICAgICAgICAgLy8gRVhVIHJlYWR5IGZvciBuZXcgZGF0YQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfWkVST19BRERSICAgPSA1J2QwOworbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfUkFfQUREUiAgICAgPSA1J2QxOworbG9jYWxwYXJhbSBbU0NSMV9HUFJfRklFTERfV0lEVEgtMTowXSBTQ1IxX01QUkZfU1BfQUREUiAgICAgPSA1J2QyOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICBpbnN0cjsKK3R5cGVfc2NyMV9pbnN0cl90eXBlX2UgICAgICAgICAgICAgIGluc3RyX3R5cGU7Cit0eXBlX3NjcjFfcnZpX29wY29kZV9lICAgICAgICAgICAgICBydmlfb3Bjb2RlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZpX2lsbGVnYWw7Citsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDM7Citsb2dpYyBbNjowXSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDc7Citsb2dpYyBbMTE6MF0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdDEyOworbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgc2hhbXQ7CitgaWZkZWYgU0NSMV9SVkNfRVhUCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbDsKK2BlbmRpZiAgLy8gU0NSMV9SVkNfRVhUCitgaWZkZWYgU0NSMV9SVkVfRVhUCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVfaWxsZWdhbDsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5zdHJ1Y3Rpb24gZGVjb2RpbmcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gaWR1MmlmdV9yZHlfbyAgPSBleHUyaWR1X3JkeV9pOworYXNzaWduIGlkdTJleHVfcmVxX28gID0gaWZ1MmlkdV92ZF9pOworYXNzaWduIGluc3RyICAgICAgICAgID0gaWZ1MmlkdV9pbnN0cl9pOworCisvLyBSVkkgLyBSVkMKK2Fzc2lnbiBpbnN0cl90eXBlICAgPSB0eXBlX3NjcjFfaW5zdHJfdHlwZV9lJyhpbnN0clsxOjBdKTsKKworLy8gUlZJIC8gUlZDIGZpZWxkcworYXNzaWduIHJ2aV9vcGNvZGUgICA9IHR5cGVfc2NyMV9ydmlfb3Bjb2RlX2UnKGluc3RyWzY6Ml0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlZJCithc3NpZ24gZnVuY3QzICAgICAgID0gKGluc3RyX3R5cGUgPT0gU0NSMV9JTlNUUl9SVkkpID8gaW5zdHJbMTQ6MTJdIDogaW5zdHJbMTU6MTNdOyAvLyBSVkkgLyBSVkMKK2Fzc2lnbiBmdW5jdDcgICAgICAgPSBpbnN0clszMToyNV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJWSQorYXNzaWduIGZ1bmN0MTIgICAgICA9IGluc3RyWzMxOjIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlZJIChTWVNURU0pCithc3NpZ24gc2hhbXQgICAgICAgID0gaW5zdHJbMjQ6MjBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSVkkKKworLy8gUlYzMkkoTUMpIGRlY29kZQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICAvLyBEZWZhdWx0cworICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKKyAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9OT05FOworICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOworICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfTk9ORTsKKyAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgID0gU0NSMV9DU1JfT1BfUkVHOworICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgPSBTQ1IxX0NTUl9DTURfTk9ORTsKKyAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9OT05FOworICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28uYnJhbmNoX3JlcSAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28ubXJldF9yZXEgICAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28uZmVuY2VpX3JlcSAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28ud2ZpX3JlcSAgICAgPSAxJ2IwOworICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSAnMDsKKyAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gJzA7CisgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9ICcwOworICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSAnMDsKKyAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMDsKKyAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9JTlNUUl9NSVNBTElHTjsKKworICAgIC8vIENsb2NrIGdhdGluZworICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IwOworICAgIGlkdTJleHVfdXNlX3JzMl9vICAgICAgICAgPSAxJ2IwOworICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IwOworICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IwOworCisgICAgcnZpX2lsbGVnYWwgICAgICAgICAgICAgPSAxJ2IwOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgIHJ2ZV9pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMDsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCitgaWZkZWYgU0NSMV9SVkNfRVhUCisgICAgcnZjX2lsbGVnYWwgICAgICAgICAgICAgPSAxJ2IwOworYGVuZGlmICAvLyBTQ1IxX1JWQ19FWFQKKworICAgIC8vIENoZWNrIGZvciBJTUVNIGFjY2VzcyBmYXVsdAorICAgIGlmIChpZnUyaWR1X2ltZW1fZXJyX2kpIGJlZ2luCisgICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgPSAxJ2IxOworICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9JTlNUUl9BQ0NFU1NfRkFVTFQ7CisgICAgICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSBpZnUyaWR1X2Vycl9ydmlfaGlfaTsKKyAgICBlbmQgZWxzZSBiZWdpbiAgLy8gbm8gaW1lbSBmYXVsdAorICAgICAgICBjYXNlIChpbnN0cl90eXBlKQorICAgICAgICAgICAgU0NSMV9JTlNUUl9SVkkgIDogYmVnaW4KKyAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTk6MTVdOworICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBpbnN0clsyNDoyMF07CisgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOworICAgICAgICAgICAgICAgIGNhc2UgKHJ2aV9vcGNvZGUpCisgICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0FVSVBDICAgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9TVU0yOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHtpbnN0clszMToxMl0sIDEyJ2IwfTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9BVUlQQworCisgICAgICAgICAgICAgICAgICAgIFNDUjFfT1BDT0RFX0xVSSAgICAgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHtpbnN0clszMToxMl0sIDEyJ2IwfTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9MVUkKKworICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9KQUwgICAgICAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUENfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSU5DX1BDOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5qdW1wX3JlcSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3sxMntpbnN0clszMV19fSwgaW5zdHJbMTk6MTJdLCBpbnN0clsyMF0sIGluc3RyWzMwOjIxXSwgMSdiMH07CitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfSkFMCisKKyAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfTE9BRCAgICAgICAgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0xTVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzMxXX19LCBpbnN0clszMDoyMF19OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfTEI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9MSDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX0xXOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfTEJVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfTEhVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBydmlfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSB8IGluc3RyWzE5XSkgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgIGVuZCAvLyBTQ1IxX09QQ09ERV9MT0FECisKKyAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfU1RPUkUgICAgICAgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzMxXX19LCBpbnN0clszMDoyNV0sIGluc3RyWzExOjddfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogaWR1MmV4dV9jbWRfby5sc3VfY21kID0gU0NSMV9MU1VfQ01EX1NCOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgPSBTQ1IxX0xTVV9DTURfU0g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGlkdTJleHVfY21kX28ubHN1X2NtZCA9IFNDUjFfTFNVX0NNRF9TVzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxOV0gfCBpbnN0clsyNF0pICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfU1RPUkUKKworICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9PUCAgICAgICAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0NykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA3J2IwMDAwMDAwIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9BREQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCX0xUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDExICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TVUJfTFRVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9YT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1NSTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0FORDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLy8gNydiMDAwMDAwMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDEwMDAwMCA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9TUkE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAvLyA3J2IwMTAwMDAwCitgaWZkZWYgU0NSMV9SVk1fRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDAwMDAwMSA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfTVVMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9NVUxIOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9NVUxIU1U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX01VTEhVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgID0gU0NSMV9JQUxVX0NNRF9ESVY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX0RJVlU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1JFTTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfUkVNVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLy8gNydiMDAwMDAwMQorYGVuZGlmICAvLyBTQ1IxX1JWTV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDcKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0gfCBpbnN0clsxOV0gfCBpbnN0clsyNF0pICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfT1AKKworICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9PUF9JTU0gICAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjF7aW5zdHJbMzFdfX0sIGluc3RyWzMwOjIwXX07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfQUREOyAgICAgICAgLy8gQURESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCX0xUOyAgICAgLy8gU0xUSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfU1VCX0xUVTsgICAgLy8gU0xUSVUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX1hPUjsgICAgICAgIC8vIFhPUkkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgPSBTQ1IxX0lBTFVfQ01EX09SOyAgICAgICAgIC8vIE9SSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjExMSAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICA9IFNDUjFfSUFMVV9DTURfQU5EOyAgICAgICAgLy8gQU5ESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3J2IwMDAwMDAwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU0xMSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSBgU0NSMV9YTEVOJyhzaGFtdCk7ICAgLy8gemVyby1leHRlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgIDogcnZpX2lsbGVnYWwgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3Q3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0NykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcnYjAwMDAwMDAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTUkxJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IGBTQ1IxX1hMRU4nKHNoYW10KTsgICAvLyB6ZXJvLWV4dGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NSTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNydiMDEwMDAwMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNSQUkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gYFNDUjFfWExFTicoc2hhbXQpOyAgIC8vIHplcm8tZXh0ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1JBOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICA6IHJ2aV9pbGxlZ2FsICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0NworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0gfCBpbnN0clsxOV0pICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfT1BfSU1NCisKKyAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfTUlTQ19NRU0gICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAofnx7aW5zdHJbMzE6MjhdLCBpbnN0clsxOToxNV0sIGluc3RyWzExOjddfSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZFTkNFID0gTk9QCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJ2aV9pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58e2luc3RyWzMxOjE1XSwgaW5zdHJbMTE6N119KSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRkVOQ0UuSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5mZW5jZWlfcmVxICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBydmlfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MworICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfTUlTQ19NRU0KKworICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9CUkFOQ0ggICAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjB7aW5zdHJbMzFdfX0sIGluc3RyWzddLCBpbnN0clszMDoyNV0sIGluc3RyWzExOjhdLCAxJ2IwfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uYnJhbmNoX3JlcSAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19SRUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9FUTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCA9IFNDUjFfSUFMVV9DTURfU1VCX05FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMCAgOiBpZHUyZXh1X2NtZF9vLmlhbHVfY21kID0gU0NSMV9JQUxVX0NNRF9TVUJfTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGlkdTJleHVfY21kX28uaWFsdV9jbWQgPSBTQ1IxX0lBTFVfQ01EX1NVQl9HRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCA9IFNDUjFfSUFMVV9DTURfU1VCX0xUVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogaWR1MmV4dV9jbWRfby5pYWx1X2NtZCA9IFNDUjFfSUFMVV9DTURfU1VCX0dFVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxOV0gfCBpbnN0clsyNF0pICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQgLy8gU0NSMV9PUENPREVfQlJBTkNICisKKyAgICAgICAgICAgICAgICAgICAgU0NSMV9PUENPREVfSkFMUiAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKQUxSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsID0gU0NSMV9SRF9XQl9JTkNfUEM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgPSB7ezIxe2luc3RyWzMxXX19LCBpbnN0clszMDoyMF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBydmlfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX0pBTFIKKworICAgICAgICAgICAgICAgICAgICBTQ1IxX09QQ09ERV9TWVNURU0gICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICA9IGBTQ1IxX1hMRU4nKHtmdW5jdDMsIGluc3RyWzMxOjIwXX0pOyAgICAgIC8vIHtmdW5jdDMsIENTUiBhZGRyZXNzfQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKHtpbnN0clsxOToxNV0sIGluc3RyWzExOjddfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwJ2QwIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDEyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMidoMDAwIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVDQUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19yZXEgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZXhjX2NvZGUgICAgPSBTQ1IxX0VYQ19DT0RFX0VDQUxMX007CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMidoMDAxIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVCUkVBSworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTInaDMwMiA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNUkVUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLm1yZXRfcmVxICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyJ2gxMDUgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV0ZJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLndmaV9yZXEgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBydmlfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBydmlfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8ge2luc3RyWzE5OjE1XSwgaW5zdHJbMTE6N119CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAxICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJXCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfV1JJVEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX29wICAgICAgICAgID0gU0NSMV9DU1JfT1BfUkVHOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NSUlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgICAgICA9IFNDUjFfUkRfV0JfQ1NSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgICAgICA9IFNDUjFfQ1NSX0NNRF9TRVQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX29wICAgICAgICAgID0gU0NSMV9DU1JfT1BfUkVHOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdIHwgaW5zdHJbMTldKSAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTEgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NSUkMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgICAgICA9IFNDUjFfUkRfV0JfQ1NSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9jbWQgICAgICAgICA9IFNDUjFfQ1NSX0NNRF9DTEVBUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3Jfb3AgICAgICAgICAgPSBTQ1IxX0NTUl9PUF9SRUc7CitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0gfCBpbnN0clsxOV0pICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjEwMSAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDU1JSV0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICAgICAgPSAxJ2IxOyAgICAgICAgICAgICAvLyB6aW1tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgICAgID0gU0NSMV9SRF9XQl9DU1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX2NtZCAgICAgICAgID0gU0NSMV9DU1JfQ01EX1dSSVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX0lNTTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJTSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjE7ICAgICAgICAgICAgIC8vIHppbW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmNzcl9vcCAgICAgICAgICA9IFNDUjFfQ1NSX09QX0lNTTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMTExICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTUlJDSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgICAgICA9IDEnYjE7ICAgICAgICAgICAgIC8vIHppbW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX0NTUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfQ0xFQVI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uY3NyX29wICAgICAgICAgID0gU0NSMV9DU1JfT1BfSU1NOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKKyAgICAgICAgICAgICAgICAgICAgZW5kIC8vIFNDUjFfT1BDT0RFX1NZU1RFTQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcnZpX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIHJ2aV9vcGNvZGUKKyAgICAgICAgICAgIGVuZCAvLyBTQ1IxX0lOU1RSX1JWSQorCitgaWZkZWYgU0NSMV9SVkNfRVhUCisKKyAgICAgICAgICAgIC8vIFF1YWRyYW50IDAKKyAgICAgICAgICAgIFNDUjFfSU5TVFJfUlZDMCA6IGJlZ2luCisgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbnN0cl9ydmMgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgY2FzZSAoZnVuY3QzKQorICAgICAgICAgICAgICAgICAgICAzJ2IwMDAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+fGluc3RyWzEyOjVdKSAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQURESTRTUE4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfU1BfQUREUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSB7MidiMDEsIGluc3RyWzQ6Ml19OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyMidkMCwgaW5zdHJbMTA6N10sIGluc3RyWzEyOjExXSwgaW5zdHJbNV0sIGluc3RyWzZdLCAyJ2IwMH07CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuTFcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5sc3VfY21kICAgICA9IFNDUjFfTFNVX0NNRF9MVzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0xTVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSB7MidiMDEsIGluc3RyWzk6N119OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IHsyJ2IwMSwgaW5zdHJbNDoyXX07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gezI1J2QwLCBpbnN0cls1XSwgaW5zdHJbMTI6MTBdLCBpbnN0cls2XSwgMidiMDB9OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgMydiMTEwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlNXCisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uc3VtMl9vcCAgICAgPSBTQ1IxX1NVTTJfT1BfUkVHX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ubHN1X2NtZCAgICAgPSBTQ1IxX0xTVV9DTURfU1c7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gezInYjAxLCBpbnN0cls5OjddfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSB7MidiMDEsIGluc3RyWzQ6Ml19OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNSdkMCwgaW5zdHJbNV0sIGluc3RyWzEyOjEwXSwgaW5zdHJbNl0sIDInYjAwfTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmRjYXNlIC8vIGZ1bmN0MworICAgICAgICAgICAgZW5kIC8vIFF1YWRyYW50IDAKKworICAgICAgICAgICAgLy8gUXVhZHJhbnQgMQorICAgICAgICAgICAgU0NSMV9JTlNUUl9SVkMxIDogYmVnaW4KKyAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmluc3RyX3J2YyAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICBjYXNlIChmdW5jdDMpCisgICAgICAgICAgICAgICAgICAgIDMnYjAwMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5BRERJIC8gQy5OT1AKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBpbnN0clsxMTo3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfYWRkciAgICAgPSBpbnN0clsxMTo3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezI3e2luc3RyWzEyXX19LCBpbnN0cls2OjJdfTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV0pICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IwMDEgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuSkFMCisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1BDX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lOQ19QQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IFNDUjFfTVBSRl9SQV9BRERSOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjF7aW5zdHJbMTJdfX0sIGluc3RyWzhdLCBpbnN0clsxMDo5XSwgaW5zdHJbNl0sIGluc3RyWzddLCBpbnN0clsyXSwgaW5zdHJbMTFdLCBpbnN0cls1OjNdLCAxJ2IwfTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIDMnYjAxMCAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5MSQorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7Mjd7aW5zdHJbMTJdfX0sIGluc3RyWzY6Ml19OworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIDMnYjAxMSAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58e2luc3RyWzEyXSwgaW5zdHJbNjoyXX0pIHJ2Y19pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMTo3XSA9PSBTQ1IxX01QUkZfU1BfQUREUikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFEREkxNlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQUREOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfU1BfQUREUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gU0NSMV9NUFJGX1NQX0FERFI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MjN7aW5zdHJbMTJdfX0sIGluc3RyWzQ6M10sIGluc3RyWzVdLCBpbnN0clsyXSwgaW5zdHJbNl0sIDQnZDB9OworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkxVSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gaW5zdHJbMTE6N107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHt7MTV7aW5zdHJbMTJdfX0sIGluc3RyWzY6Ml0sIDEyJ2QwfTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IxMDAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSB7MidiMDEsIGluc3RyWzk6N119OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IHsyJ2IwMSwgaW5zdHJbOTo3XX07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gezInYjAxLCBpbnN0cls0OjJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChpbnN0clsxMToxMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMidiMDAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMl0pICAgICAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TUkxJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gezI3J2QwLCBpbnN0cls2OjJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1JMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMidiMDEgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMl0pICAgICAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TUkFJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gezI3J2QwLCBpbnN0cls2OjJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1JBOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMidiMTAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQU5ESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQU5EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfb3AgICAgID0gU0NSMV9JQUxVX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezI3e2luc3RyWzEyXX19LCBpbnN0cls2OjJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyJ2IxMSAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKHtpbnN0clsxMl0sIGluc3RyWzY6NV19KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQy5TVUIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9TVUI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAwMSAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuWE9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfWE9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzJ2IwMTAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLk9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMnYjAxMSAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfQU5EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX3diX3NlbCAgID0gU0NSMV9SRF9XQl9JQUxVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyB7aW5zdHJbMTJdLCBpbnN0cls2OjVdfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBpbnN0clsxMToxMF0KKyAgICAgICAgICAgICAgICAgICAgZW5kIC8vIGZ1bmN0MyA9PSAzJ2IxMDAKKyAgICAgICAgICAgICAgICAgICAgMydiMTAxICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmp1bXBfcmVxICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSB7ezIxe2luc3RyWzEyXX19LCBpbnN0cls4XSwgaW5zdHJbMTA6OV0sIGluc3RyWzZdLCBpbnN0cls3XSwgaW5zdHJbMl0sIGluc3RyWzExXSwgaW5zdHJbNTozXSwgMSdiMH07CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQkVRWgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1VCX0VROworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSB7MidiMDEsIGluc3RyWzk6N119OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IFNDUjFfTVBSRl9aRVJPX0FERFI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syNHtpbnN0clsxMl19fSwgaW5zdHJbNjo1XSwgaW5zdHJbMl0sIGluc3RyWzExOjEwXSwgaW5zdHJbNDozXSwgMSdiMH07CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IxMTEgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuQk5FWgorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X2NtZCAgICA9IFNDUjFfSUFMVV9DTURfU1VCX05FOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pYWx1X29wICAgICA9IFNDUjFfSUFMVV9PUF9SRUdfUkVHOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9QQ19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmJyYW5jaF9yZXEgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSB7MidiMDEsIGluc3RyWzk6N119OworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczJfYWRkciAgICA9IFNDUjFfTVBSRl9aRVJPX0FERFI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0ge3syNHtpbnN0clsxMl19fSwgaW5zdHJbNjo1XSwgaW5zdHJbMl0sIGluc3RyWzExOjEwXSwgaW5zdHJbNDozXSwgMSdiMH07CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZGNhc2UgLy8gZnVuY3QzCisgICAgICAgICAgICBlbmQgLy8gUXVhZHJhbnQgMQorCisgICAgICAgICAgICAvLyBRdWFkcmFudCAyCisgICAgICAgICAgICBTQ1IxX0lOU1RSX1JWQzIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGNhc2UgKGZ1bmN0MykKKyAgICAgICAgICAgICAgICAgICAgMydiMDAwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTJdKSAgICAgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLlNMTEkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gaW5zdHJbMTE6N107CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gezI3J2QwLCBpbnN0cls2OjJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9jbWQgICAgPSBTQ1IxX0lBTFVfQ01EX1NMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX0lNTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lBTFU7CitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgMydiMDEwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAofnxpbnN0clsxMTo3XSkgICAgICBydmNfaWxsZWdhbCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkxXU1AKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfaW1tX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmxzdV9jbWQgICAgID0gU0NSMV9MU1VfQ01EX0xXOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfTFNVOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IFNDUjFfTVBSRl9TUF9BRERSOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNCdkMCwgaW5zdHJbMzoyXSwgaW5zdHJbMTJdLCBpbnN0cls2OjRdLCAyJ2IwMH07CitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgMydiMTAwICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAofmluc3RyWzEyXSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAofGluc3RyWzY6Ml0pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuTVYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9BREQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IFNDUjFfTVBSRl9aRVJPX0FERFI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBpbnN0cls2OjJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJkX2FkZHIgICAgID0gaW5zdHJbMTE6N107CitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0clsxMV18aW5zdHJbNl0pIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58aW5zdHJbMTE6N10pICAgICAgcnZjX2lsbGVnYWwgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkpSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMV9hZGRyICAgID0gaW5zdHJbMTE6N107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgPSAwOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdKSAgICAgICAgICBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4gIC8vIGluc3RyWzEyXSA9PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH58aW5zdHJbMTE6Ml0pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuRUJSRUFLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uZXhjX3JlcSAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgID0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmICh+fGluc3RyWzY6Ml0pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuSkFMUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmRfbyAgICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnN1bTJfb3AgICAgID0gU0NSMV9TVU0yX09QX1JFR19JTU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucmRfd2Jfc2VsICAgPSBTQ1IxX1JEX1dCX0lOQ19QQzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5qdW1wX3JlcSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBpbnN0clsxMTo3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IFNDUjFfTVBSRl9SQV9BRERSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmltbSAgICAgICAgID0gMDsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RyWzExXSkgICAgICAgICAgcnZlX2lsbGVnYWwgPSAxJ2IxOworYGVuZGlmICAvLyBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDLkFERAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczFfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX3JkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgID0gU0NSMV9JQUxVX0NNRF9BREQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaWFsdV9vcCAgICAgPSBTQ1IxX0lBTFVfT1BfUkVHX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICA9IFNDUjFfUkRfV0JfSUFMVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yczFfYWRkciAgICA9IGluc3RyWzExOjddOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZF9vLnJzMl9hZGRyICAgID0gaW5zdHJbNjoyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5yZF9hZGRyICAgICA9IGluc3RyWzExOjddOworYGlmZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJbMTFdfGluc3RyWzZdKSBydmVfaWxsZWdhbCA9IDEnYjE7CitgZW5kaWYgIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vIGluc3RyWzEyXSA9PSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAzJ2IxMTAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMuU1dTUAorICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxX28gICAgICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9yczJfbyAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5zdW0yX29wICAgICA9IFNDUjFfU1VNMl9PUF9SRUdfSU1NOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5sc3VfY21kICAgICA9IFNDUjFfTFNVX0NNRF9TVzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMxX2FkZHIgICAgPSBTQ1IxX01QUkZfU1BfQUREUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28ucnMyX2FkZHIgICAgPSBpbnN0cls2OjJdOworICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV9jbWRfby5pbW0gICAgICAgICA9IHsyNCdkMCwgaW5zdHJbODo3XSwgaW5zdHJbMTI6OV0sIDInYjAwfTsKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cls2XSkgICAgICAgICAgIHJ2ZV9pbGxlZ2FsID0gMSdiMTsKK2BlbmRpZiAgLy8gU0NSMV9SVkVfRVhUCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2Y19pbGxlZ2FsID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kY2FzZSAvLyBmdW5jdDMKKyAgICAgICAgICAgIGVuZCAvLyBRdWFkcmFudCAyCisKKyAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICBlbmQKK2BlbHNlICAgLy8gU0NSMV9SVkNfRVhUCisgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlkdTJleHVfY21kX28uaW5zdHJfcnZjICAgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJ2aV9pbGxlZ2FsICAgICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorYGVuZGlmICAvLyBTQ1IxX1JWQ19FWFQKKyAgICAgICAgZW5kY2FzZSAvLyBpbnN0cl90eXBlCisgICAgZW5kIC8vIG5vIGltZW0gZmF1bHQKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGluc3RydWN0aW9uIGlzIGZ1bGx5IGRlY29kZWQKKyAgICAvLyBnaXZlbiB0aGF0IG5vIGltZW0gZmF1bHQgaGFzIGhhcHBlbmVkCisKKyAgICAvLyBDaGVjayBpbGxlZ2FsIGluc3RydWN0aW9uCisgICAgaWYgKAorICAgIHJ2aV9pbGxlZ2FsCitgaWZkZWYgU0NSMV9SVkNfRVhUCisgICAgfCBydmNfaWxsZWdhbAorYGVuZGlmCitgaWZkZWYgU0NSMV9SVkVfRVhUCisgICAgfCBydmVfaWxsZWdhbAorYGVuZGlmCisgICAgKSBiZWdpbgorICAgICAgICBpZHUyZXh1X2NtZF9vLmlhbHVfY21kICAgICAgICA9IFNDUjFfSUFMVV9DTURfTk9ORTsKKyAgICAgICAgaWR1MmV4dV9jbWRfby5sc3VfY21kICAgICAgICAgPSBTQ1IxX0xTVV9DTURfTk9ORTsKKyAgICAgICAgaWR1MmV4dV9jbWRfby5jc3JfY21kICAgICAgICAgPSBTQ1IxX0NTUl9DTURfTk9ORTsKKyAgICAgICAgaWR1MmV4dV9jbWRfby5yZF93Yl9zZWwgICAgICAgPSBTQ1IxX1JEX1dCX05PTkU7CisgICAgICAgIGlkdTJleHVfY21kX28uanVtcF9yZXEgICAgICAgID0gMSdiMDsKKyAgICAgICAgaWR1MmV4dV9jbWRfby5icmFuY2hfcmVxICAgICAgPSAxJ2IwOworICAgICAgICBpZHUyZXh1X2NtZF9vLm1yZXRfcmVxICAgICAgICA9IDEnYjA7CisgICAgICAgIGlkdTJleHVfY21kX28uZmVuY2VpX3JlcSAgICAgID0gMSdiMDsKKyAgICAgICAgaWR1MmV4dV9jbWRfby53ZmlfcmVxICAgICAgICAgPSAxJ2IwOworCisgICAgICAgIGlkdTJleHVfdXNlX3JzMV9vICAgICAgICAgICAgID0gMSdiMDsKKyAgICAgICAgaWR1MmV4dV91c2VfcnMyX28gICAgICAgICAgICAgPSAxJ2IwOworICAgICAgICBpZHUyZXh1X3VzZV9yZF9vICAgICAgICAgICAgICA9IDEnYjA7CisKK2BpZm5kZWYgU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCisgICAgICAgIGlkdTJleHVfdXNlX2ltbV9vICAgICAgICAgICAgID0gMSdiMDsKK2BlbHNlIC8vIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgorICAgICAgICBpZHUyZXh1X3VzZV9pbW1fbyAgICAgICAgICAgICA9IDEnYjE7CisgICAgICAgIGlkdTJleHVfY21kX28uaW1tICAgICAgICAgICAgID0gaW5zdHI7CitgZW5kaWYgLy8gU0NSMV9NVFZBTF9JTExFR0FMX0lOU1RSX0VOCisKKyAgICAgICAgaWR1MmV4dV9jbWRfby5leGNfcmVxICAgICAgICAgPSAxJ2IxOworICAgICAgICBpZHUyZXh1X2NtZF9vLmV4Y19jb2RlICAgICAgICA9IFNDUjFfRVhDX0NPREVfSUxMRUdBTF9JTlNUUjsKKyAgICBlbmQKKworZW5kIC8vIFJWMzJJKE1DKSBkZWNvZGUKKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFggY2hlY2tzCisKK1NDUjFfU1ZBX0lEVV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oe2lmdTJpZHVfdmRfaSwgZXh1MmlkdV9yZHlfaX0pCisgICAgKSBlbHNlICRlcnJvcigiSURVIEVycm9yOiB1bmtub3duIHZhbHVlcyIpOworCitTQ1IxX1NWQV9JRFVfWENIRUNLMiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBpZnUyaWR1X3ZkX2kgfC0+ICEkaXN1bmtub3duKHtpZnUyaWR1X2ltZW1fZXJyX2ksIChpZnUyaWR1X2ltZW1fZXJyX2kgPyAwIDogaWZ1MmlkdV9pbnN0cl9pKX0pCisgICAgKSBlbHNlICRlcnJvcigiSURVIEVycm9yOiB1bmtub3duIHZhbHVlcyIpOworCisvLyBCZWhhdmlvciBjaGVja3MKKworU0NSMV9TVkFfSURVX0lBTFVfQ01EX1JBTkdFIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIChpZnUyaWR1X3ZkX2kgJiB+aWZ1MmlkdV9pbWVtX2Vycl9pKSB8LT4KKyAgICAoKGlkdTJleHVfY21kX28uaWFsdV9jbWQgPj0gU0NSMV9JQUxVX0NNRF9OT05FKSAmCisgICAgKGlkdTJleHVfY21kX28uaWFsdV9jbWQgPD0KK2BpZmRlZiBTQ1IxX1JWTV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lBTFVfQ01EX1JFTVUKK2BlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JQUxVX0NNRF9TUkEKK2BlbmRpZiAvLyBTQ1IxX1JWTV9FWFQKKyAgICAgICAgKSkKKyAgICApIGVsc2UgJGVycm9yKCJJRFUgRXJyb3I6IElBTFVfQ01EIG91dCBvZiByYW5nZSIpOworCitgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KKworZW5kbW9kdWxlIDogc2NyMV9waXBlX2lkdQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2lmdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwYzRmNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pZnUuc3YKQEAgLTAsMCArMSw4MjYgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9pZnUuc3Y+CisvLy8gQGJyaWVmICAgICAgSW5zdHJ1Y3Rpb24gRmV0Y2ggVW5pdCAoSUZVKQorLy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8KKyAvLyBGdW5jdGlvbmFsaXR5OgorIC8vIC0gQ29udHJvbHMgaW5zdHJ1Y3Rpb24gZmV0Y2hpbmcgcHJvY2VzczoKKyAvLyAgIC0gRmV0Y2hlcyBpbnN0cnVjdGlvbnMgZWl0aGVyIGZyb20gSU1FTSBvciBmcm9tIFByb2dyYW0gQnVmZmVyLCBzdXBwb3J0aW5nCisgLy8gICAgIHBlbmRpbmcgSU1FTSBpbnN0cnVjdGlvbnMgaGFuZGxpbmcKKyAvLyAgIC0gSGFuZGxlcyBuZXcgUEMgbWlzYWxpZ25tZW50IGFuZCBjb25zdHJ1Y3RzIHRoZSBjb3JyZWN0IGluc3RydWN0aW9uIChzdXBwb3J0cworIC8vICAgICBSVkkgYW5kIFJWQyBpbnN0cnVjdGlvbnMpCisgLy8gICAtIEVpdGhlciBzdG9yZXMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBpbnN0cnVjdGlvbiBxdWV1ZSBvciBieXBhc3NlcyB0byB0aGUKKyAvLyAgICAgSURVIGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBpcyB1c2VkCisgLy8gICAtIEZsdXNoZXMgaW5zdHJ1Y3Rpb24gcXVldWUgaWYgcmVxdWVzdGVkCisgLy8KKyAvLyBTdHJ1Y3R1cmU6CisgLy8gLSBJbnN0cnVjdGlvbiBxdWV1ZQorIC8vIC0gSUZVIEZTTQorIC8vIC0gSUZVIDwtPiBJTUVNIGkvZgorIC8vIC0gSUZVIDwtPiBJRFUgaS9mCisgLy8gLSBJRlUgPC0+IEhEVSBpL2YKKyAvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX2hkdS5zdmgiCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworbW9kdWxlIHNjcjFfcGlwZV9pZnUKKygKKyAgICAvLyBDb250cm9sIHNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gSUZVIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIElGVSBjbG9jaworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaWZ1X3N0b3BfZmV0Y2hfaSwgICAgICAvLyBTdG9wIGluc3RydWN0aW9uIGZldGNoCisKKyAgICAvLyBJRlUgPC0+IElNRU0gaW50ZXJmYWNlCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbTJpZnVfcmVxX2Fja19pLCAgICAgICAgIC8vIEluc3RydWN0aW9uIG1lbW9yeSByZXF1ZXN0IGFja25vd2xlZGdlbWVudAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpbWVtX3JlcV9vLCAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcmVxdWVzdAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgIGlmdTJpbWVtX2NtZF9vLCAgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgY29tbWFuZCAoUkVBRC9XUklURSkKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICBpZnUyaW1lbV9hZGRyX28sICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGFkZHJlc3MKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgICAgICAgICBpbWVtMmlmdV9yZGF0YV9pLCAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IHJlYWQgZGF0YQorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgIGltZW0yaWZ1X3Jlc3BfaSwgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcmVzcG9uc2UKKworICAgIC8vIElGVSA8LT4gRVhVIE5ldyBQQyBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWZ1X3BjX25ld19yZXFfaSwgICAgICAgLy8gTmV3IFBDIHJlcXVlc3QgKGp1bXBzLCBicmFuY2hlcywgdHJhcHMgZXRjKQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGV4dTJpZnVfcGNfbmV3X2ksICAgICAgICAgICAvLyBOZXcgUEMKKworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLy8gSUZVIDwtPiBIRFUgUHJvZ3JhbSBCdWZmZXIgaW50ZXJmYWNlCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2ZldGNoX2ksICAgICAgIC8vIEZldGNoIGluc3RydWN0aW9ucyBwcm92aWRlZCBieSBQcm9ncmFtIEJ1ZmZlcgorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9yZHlfbywgICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpL2YgcmVhZHkKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfdmRfaSwgICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gdmFsaWQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHUyaWZ1X3BidWZfZXJyX2ksICAgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgSW5zdHJ1Y3Rpb24gaS9mIGVycm9yCisgICAgaW5wdXQgICBsb2dpYyBbU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSC0xOjBdICAgaGR1MmlmdV9wYnVmX2luc3RyX2ksICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIEluc3RydWN0aW9uIGl0c2VsZgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUycGlwZV9pbWVtX3R4bnNfcG5kX28sICAgLy8gVGhlcmUgYXJlIHBlbmRpbmcgaW1lbSB0cmFuc2FjdGlvbnMKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKworICAgIC8vIElGVSA8LT4gSURVIGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkdTJpZnVfcmR5X2ksICAgICAgICAgICAgICAvLyBJRFUgcmVhZHkgZm9yIG5ldyBkYXRhCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgaWZ1MmlkdV9pbnN0cl9vLCAgICAgICAgICAgIC8vIElGVSBpbnN0cnVjdGlvbgorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbywgICAgICAgICAvLyBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgZXhjZXB0aW9uCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28sICAgICAgIC8vIDEgLSBpbWVtIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGZldGNoIHNlY29uZCBoYWxmIG9mIGFuIHVuYWxpZ25lZCBSVkkgaW5zdHJ1Y3Rpb24KKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgICAgICAgLy8gSUZVIHJlcXVlc3QKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2NhbHBhcmFtIFNDUjFfSUZVX1FfU0laRV9XT1JEICAgICA9IDI7Citsb2NhbHBhcmFtIFNDUjFfSUZVX1FfU0laRV9IQUxGICAgICA9IFNDUjFfSUZVX1FfU0laRV9XT1JEICogMjsKK2xvY2FscGFyYW0gU0NSMV9UWE5fQ05UX1cgICAgICAgICAgID0gMzsKKworbG9jYWxwYXJhbSBTQ1IxX0lGVV9RVUVVRV9BRFJfVyAgICAgPSAkY2xvZzIoU0NSMV9JRlVfUV9TSVpFX0hBTEYpOworbG9jYWxwYXJhbSBTQ1IxX0lGVV9RVUVVRV9QVFJfVyAgICAgPSBTQ1IxX0lGVV9RVUVVRV9BRFJfVyArIDE7CisKK2xvY2FscGFyYW0gU0NSMV9JRlVfUV9GUkVFX0hfVyAgICAgID0gJGNsb2cyKFNDUjFfSUZVX1FfU0laRV9IQUxGICsgMSk7Citsb2NhbHBhcmFtIFNDUjFfSUZVX1FfRlJFRV9XX1cgICAgICA9ICRjbG9nMihTQ1IxX0lGVV9RX1NJWkVfV09SRCArIDEpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9JRlVfRlNNX0lETEUsCisgICAgU0NSMV9JRlVfRlNNX0ZFVENICit9IHR5cGVfc2NyMV9pZnVfZnNtX2U7CisKK3R5cGVkZWYgZW51bSBsb2dpY1sxOjBdIHsKKyAgICBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FLCAgICAgIC8vIE5vIHdyaXRlIHRvIHF1ZXVlCisgICAgU0NSMV9JRlVfUVVFVUVfV1JfRlVMTCwgICAgICAvLyBXcml0ZSAzMiByZGF0YSBiaXRzIHRvIHF1ZXVlCisgICAgU0NSMV9JRlVfUVVFVUVfV1JfSEkgICAgICAgICAvLyBXcml0ZSAxNiB1cHBlciByZGF0YSBiaXRzIHRvIHF1ZXVlCit9IHR5cGVfc2NyMV9pZnVfcXVldWVfd3JfZTsKKwordHlwZWRlZiBlbnVtIGxvZ2ljWzE6MF0geworICAgIFNDUjFfSUZVX1FVRVVFX1JEX05PTkUsICAgICAgLy8gTm8gcXVldWUgcmVhZAorICAgIFNDUjFfSUZVX1FVRVVFX1JEX0hXT1JELCAgICAgLy8gUmVhZCBoYWxmd29yZAorICAgIFNDUjFfSUZVX1FVRVVFX1JEX1dPUkQgICAgICAgLy8gUmVhZCB3b3JkCit9IHR5cGVfc2NyMV9pZnVfcXVldWVfcmRfZTsKKworYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCit0eXBlZGVmIGVudW0gbG9naWNbMTowXSB7CisgICAgU0NSMV9CWVBBU1NfTk9ORSwgICAgICAgICAgICAgICAvLyBObyBieXBhc3MKKyAgICBTQ1IxX0JZUEFTU19SVkMsICAgICAgICAgICAgICAgIC8vIEJ5cGFzcyBSVkMKKyAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUUsICAgIC8vIEJ5cGFzcyBSVkksIHJkYXRhK3F1ZXVlCisgICAgU0NSMV9CWVBBU1NfUlZJX1JEQVRBICAgICAgICAgICAvLyBCeXBhc3MgUlZJLCByZGF0YSBvbmx5Cit9IHR5cGVfc2NyMV9ieXBhc3NfZTsKK2BlbmRpZiAvLyBTQ1IxX05PX0RFQ19TVEFHRQorCit0eXBlZGVmIGVudW0gbG9naWMgWzI6MF0geworICAgIC8vIFNDUjFfSUZVX0lOU1RSXzxVUFBFUl8xNl9CSVRTPl88TE9XRVJfMTZfQklUUz4KKyAgICBTQ1IxX0lGVV9JTlNUUl9OT05FLCAgICAgICAgICAgICAgICAvLyBObyB2YWxpZCBpbnN0cnVjdGlvbgorICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9ISV9SVklfTE8sICAgICAgIC8vIEZ1bGwgUlYzMkkgaW5zdHJ1Y3Rpb24KKyAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfUlZDLAorICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVkMsCisgICAgU0NSMV9JRlVfSU5TVFJfUlZDX1JWSV9ISSwKKyAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZJX0hJLAorICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19OViwgICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIGFmdGVyIHVuYWxpZ25lZCBuZXdfcGMKKyAgICBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fTlYgICAgICAgICAgICAvLyBJbnN0cnVjdGlvbiBhZnRlciB1bmFsaWduZWQgbmV3X3BjCit9IHR5cGVfc2NyMV9pZnVfaW5zdHJfZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEluc3RydWN0aW9uIHF1ZXVlIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIE5ldyBQQyB1bmFsaWduZWQgZmxhZyByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19wY191bmFsaWduZWRfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19wY191bmFsaWduZWRfdXBkOworCisvLyBJTUVNIGluc3RydWN0aW9uIHR5cGUgZGVjb2RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJfaGlfaXNfcnZpOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJfbG9faXNfcnZpOwordHlwZV9zY3IxX2lmdV9pbnN0cl9lICAgICAgICAgICAgICAgaW5zdHJfdHlwZTsKKworLy8gUmVnaXN0ZXIgdG8gc3RvcmUgaWYgdGhlIHByZXZpb3VzIElNRU0gaW5zdHJ1Y3Rpb24gaGFkIGxvdyBwYXJ0IG9mIFJWSSBpbnN0cnVjdGlvbgorLy8gaW4gaXRzIGhpZ2ggcGFydAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJfaGlfcnZpX2xvX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJfaGlfcnZpX2xvX25leHQ7CisKKy8vIFF1ZXVlIHJlYWQvd3JpdGUgc2l6ZSBkZWNvZGVycwordHlwZV9zY3IxX2lmdV9xdWV1ZV9yZF9lICAgICAgICAgICAgcV9yZF9zaXplOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9yZF92ZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfcmRfbm9uZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfcmRfaHdvcmQ7Cit0eXBlX3NjcjFfaWZ1X3F1ZXVlX3dyX2UgICAgICAgICAgICBxX3dyX3NpemU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3dyX25vbmU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3dyX2Z1bGw7CisKKy8vIFdyaXRlL3JlYWQgcG9pbnRlciByZWdpc3RlcnMKK2xvZ2ljIFtTQ1IxX0lGVV9RVUVVRV9QVFJfVy0xOjBdICAgIHFfcnB0cjsKK2xvZ2ljIFtTQ1IxX0lGVV9RVUVVRV9QVFJfVy0xOjBdICAgIHFfcnB0cl9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9ycHRyX3VwZDsKK2xvZ2ljIFtTQ1IxX0lGVV9RVUVVRV9QVFJfVy0xOjBdICAgIHFfd3B0cjsKK2xvZ2ljIFtTQ1IxX0lGVV9RVUVVRV9QVFJfVy0xOjBdICAgIHFfd3B0cl9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV93cHRyX3VwZDsKKworLy8gSW5zdHJ1Y3Rpb24gcXVldWUgY29udHJvbCBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3dyX2VuOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9mbHVzaF9yZXE7CisKKy8vIFF1ZXVlIGRhdGEgcmVnaXN0ZXJzCitsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgvMi0xOjBdICAgICBxX2RhdGEgIFtTQ1IxX0lGVV9RX1NJWkVfSEFMRl07Citsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgvMi0xOjBdICAgICBxX2RhdGFfaGVhZDsKK2xvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC8yLTE6MF0gICAgIHFfZGF0YV9uZXh0OworCisvLyBRdWV1ZSBlcnJvciBmbGFncyByZWdpc3RlcnMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZXJyICAgW1NDUjFfSUZVX1FfU0laRV9IQUxGXTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZXJyX2hlYWQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2Vycl9uZXh0OworCisvLyBJbnN0cnVjdGlvbiBxdWV1ZSBzdGF0dXMgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9pc19lbXB0eTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfaGFzX2ZyZWVfc2xvdHM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2hhc18xX29jcGRfaHc7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2hlYWRfaXNfcnZjOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9oZWFkX2lzX3J2aTsKK2xvZ2ljIFtTQ1IxX0lGVV9RX0ZSRUVfSF9XLTE6MF0gICAgIHFfb2NwZF9oOworbG9naWMgW1NDUjFfSUZVX1FfRlJFRV9IX1ctMTowXSAgICAgcV9mcmVlX2hfbmV4dDsKK2xvZ2ljIFtTQ1IxX0lGVV9RX0ZSRUVfV19XLTE6MF0gICAgIHFfZnJlZV93X25leHQ7CisKKy8vIElGVSBGU00gc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSUZVIEZTTSBjb250cm9sIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9mZXRjaF9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnVfc3RvcF9yZXE7CisKK3R5cGVfc2NyMV9pZnVfZnNtX2UgICAgICAgICAgICAgICAgIGlmdV9mc21fY3VycjsKK3R5cGVfc2NyMV9pZnVfZnNtX2UgICAgICAgICAgICAgICAgIGlmdV9mc21fbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdV9mc21fZmV0Y2g7CisKKy8vIElNRU0gc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSU1FTSByZXNwb25zZSBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3Bfb2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3BfZXI7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3BfZXJfZGlzY2FyZF9wbmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3BfZGlzY2FyZF9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3BfcmVjZWl2ZWQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3Jlc3BfdmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2hhbmRzaGFrZV9kb25lOworCitsb2dpYyBbMTU6MF0gICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JkYXRhX2xvOworbG9naWMgWzMxOjE2XSAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZGF0YV9oaTsKKworLy8gSU1FTSBhZGRyZXNzIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fYWRkcl91cGQ7Citsb2dpYyBbYFNDUjFfWExFTi0xOjJdICAgICAgICAgICAgICBpbWVtX2FkZHJfZmY7Citsb2dpYyBbYFNDUjFfWExFTi0xOjJdICAgICAgICAgICAgICBpbWVtX2FkZHJfbmV4dDsKKworLy8gSU1FTSBwZW5kaW5nIHRyYW5zYWN0aW9ucyBjb3VudGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3BuZF90eG5zX2NudF91cGQ7Citsb2dpYyBbU0NSMV9UWE5fQ05UX1ctMTowXSAgICAgICAgICBpbWVtX3BuZF90eG5zX2NudDsKK2xvZ2ljIFtTQ1IxX1RYTl9DTlRfVy0xOjBdICAgICAgICAgIGltZW1fcG5kX3R4bnNfY250X25leHQ7Citsb2dpYyBbU0NSMV9UWE5fQ05UX1ctMTowXSAgICAgICAgICBpbWVtX3ZkX3BuZF90eG5zX2NudDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcG5kX3R4bnNfcV9mdWxsOworCisvLyBJTUVNIHJlc3BvbnNlcyBkaXNjYXJkIGNvdW50ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudF91cGQ7Citsb2dpYyBbU0NSMV9UWE5fQ05UX1ctMTowXSAgICAgICAgICBpbWVtX3Jlc3BfZGlzY2FyZF9jbnQ7Citsb2dpYyBbU0NSMV9UWE5fQ05UX1ctMTowXSAgICAgICAgICBpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfbmV4dDsKKworYGlmZGVmIFNDUjFfTkVXX1BDX1JFRworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BjX3JlcV9mZjsKK2BlbmRpZiAvLyBTQ1IxX05FV19QQ19SRUcKKworLy8gSW5zdHJ1Y3Rpb24gYnlwYXNzIHNpZ25hbHMKK2BpZmRlZiBTQ1IxX05PX0RFQ19TVEFHRQordHlwZV9zY3IxX2J5cGFzc19lICAgICAgICAgICAgICAgICAgaW5zdHJfYnlwYXNzX3R5cGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cl9ieXBhc3NfdmQ7CitgZW5kaWYgLy8gU0NSMV9OT19ERUNfU1RBR0UKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc3RydWN0aW9uIHF1ZXVlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBJbnN0cnVjdGlvbiBxdWV1ZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBOZXcgUEMgdW5hbGlnbmVkIGZsYWcgcmVnaXN0ZXIKKyAvLyAtIEluc3RydWN0aW9uIHR5cGUgZGVjb2RlciwgaW5jbHVkaW5nIHJlZ2lzdGVyIHRvIHN0b3JlIGlmIHRoZSBwcmV2aW91cworIC8vICAgSU1FTSBpbnN0cnVjdGlvbiBoYWQgbG93IHBhcnQgb2YgUlZJIGluc3RydWN0aW9uIGluIGl0cyBoaWdoIHBhcnQKKyAvLyAtIFJlYWQvd3JpdGUgc2l6ZSBkZWNvZGVycworIC8vIC0gUmVhZC93cml0ZSBwb2ludGVyIHJlZ2lzdGVycworIC8vIC0gRGF0YSBhbmQgZXJyb3IgZmxhZyByZWdpc3RlcnMKKyAvLyAtIFN0YXR1cyBsb2dpYworLy8KKworLy8gTmV3IFBDIHVuYWxpZ25lZCBmbGFnIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gbmV3X3BjX3VuYWxpZ25lZF91cGQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSB8IGltZW1fcmVzcF92ZDsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF9mZiA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGlmIChuZXdfcGNfdW5hbGlnbmVkX3VwZCkgYmVnaW4KKyAgICAgICAgbmV3X3BjX3VuYWxpZ25lZF9mZiA8PSBuZXdfcGNfdW5hbGlnbmVkX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIG5ld19wY191bmFsaWduZWRfbmV4dCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pID8gZXh1MmlmdV9wY19uZXdfaVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IH5pbWVtX3Jlc3BfdmQgICAgICAgID8gbmV3X3BjX3VuYWxpZ25lZF9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSdiMDsKKworLy8gSW5zdHJ1Y3Rpb24gdHlwZSBkZWNvZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gaW5zdHJfaGlfaXNfcnZpID0gJmltZW0yaWZ1X3JkYXRhX2lbMTc6MTZdOworYXNzaWduIGluc3RyX2xvX2lzX3J2aSA9ICZpbWVtMmlmdV9yZGF0YV9pWzE6MF07CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaW5zdHJfdHlwZSA9IFNDUjFfSUZVX0lOU1RSX05PTkU7CisKKyAgICBpZiAoaW1lbV9yZXNwX29rICYgfmltZW1fcmVzcF9kaXNjYXJkX3JlcSkgYmVnaW4KKyAgICAgICAgaWYgKG5ld19wY191bmFsaWduZWRfZmYpIGJlZ2luCisgICAgICAgICAgICBpbnN0cl90eXBlID0gaW5zdHJfaGlfaXNfcnZpID8gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX05WCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfSU5TVFJfUlZDX05WOworICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyB+bmV3X3BjX3VuYWxpZ25lZF9mZgorICAgICAgICAgICAgaWYgKGluc3RyX2hpX3J2aV9sb19mZikgYmVnaW4KKyAgICAgICAgICAgICAgICBpbnN0cl90eXBlID0gaW5zdHJfaGlfaXNfcnZpID8gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWSV9ISQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9JTlNUUl9SVkNfUlZJX0hJOworICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gU0NSMV9PVEhFUgorICAgICAgICAgICAgICAgIGNhc2V6ICh7aW5zdHJfaGlfaXNfcnZpLCBpbnN0cl9sb19pc19ydml9KQorICAgICAgICAgICAgICAgICAgICAyJ2I/MSAgIDogaW5zdHJfdHlwZSAgID0gU0NSMV9JRlVfSU5TVFJfUlZJX0hJX1JWSV9MTzsKKyAgICAgICAgICAgICAgICAgICAgMidiMDAgICA6IGluc3RyX3R5cGUgICA9IFNDUjFfSUZVX0lOU1RSX1JWQ19SVkM7CisgICAgICAgICAgICAgICAgICAgIDInYjEwICAgOiBpbnN0cl90eXBlICAgPSBTQ1IxX0lGVV9JTlNUUl9SVklfTE9fUlZDOworICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCisvLyBSZWdpc3RlciB0byBzdG9yZSBpZiB0aGUgcHJldmlvdXMgSU1FTSBpbnN0cnVjdGlvbiBoYWQgbG93IHBhcnQgb2YgUlZJCisvLyBpbnN0cnVjdGlvbiBpbiBpdHMgaGlnaCBwYXJ0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpbnN0cl9oaV9ydmlfbG9fZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoZXh1MmlmdV9wY19uZXdfcmVxX2kpIGJlZ2luCisgICAgICAgICAgICBpbnN0cl9oaV9ydmlfbG9fZmYgPD0gMSdiMDsKKyAgICAgICAgZW5kIGVsc2UgaWYgKGltZW1fcmVzcF92ZCkgYmVnaW4KKyAgICAgICAgICAgIGluc3RyX2hpX3J2aV9sb19mZiA8PSBpbnN0cl9oaV9ydmlfbG9fbmV4dDsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworYXNzaWduIGluc3RyX2hpX3J2aV9sb19uZXh0ID0gKGluc3RyX3R5cGUgPT0gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX05WKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGluc3RyX3R5cGUgPT0gU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWSV9ISSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChpbnN0cl90eXBlID09IFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVkMpOworCisvLyBRdWV1ZSB3cml0ZS9yZWFkIHNpemUgZGVjb2RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFF1ZXVlIHJlYWQgc2l6ZSBkZWNvZGVyCithc3NpZ24gcV9yZF92ZCAgICA9IH5xX2lzX2VtcHR5ICYgaWZ1MmlkdV92ZF9vICYgaWR1MmlmdV9yZHlfaTsKK2Fzc2lnbiBxX3JkX2h3b3JkID0gcV9oZWFkX2lzX3J2YyB8IHFfZXJyX2hlYWQKK2BpZmRlZiBTQ1IxX05PX0RFQ19TVEFHRQorICAgICAgICAgICAgICAgICAgfCAocV9oZWFkX2lzX3J2aSAmIGluc3RyX2J5cGFzc192ZCkKK2BlbmRpZiAvLyBTQ1IxX05PX0RFQ19TVEFHRQorICAgICAgICAgICAgICAgICAgOworYXNzaWduIHFfcmRfc2l6ZSAgPSB+cV9yZF92ZCAgID8gU0NSMV9JRlVfUVVFVUVfUkRfTk9ORQorICAgICAgICAgICAgICAgICAgOiBxX3JkX2h3b3JkID8gU0NSMV9JRlVfUVVFVUVfUkRfSFdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX1FVRVVFX1JEX1dPUkQ7Cithc3NpZ24gcV9yZF9ub25lICA9IChxX3JkX3NpemUgPT0gU0NSMV9JRlVfUVVFVUVfUkRfTk9ORSk7CisKKy8vIFF1ZXVlIHdyaXRlIHNpemUgZGVjb2RlcgorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FOworICAgIGlmICh+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxKSBiZWdpbgorICAgICAgICBpZiAoaW1lbV9yZXNwX29rKSBiZWdpbgorYGlmZGVmIFNDUjFfTk9fREVDX1NUQUdFCisgICAgICAgICAgICBjYXNlIChpbnN0cl90eXBlKQorICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX05PTkUgICAgICAgICA6IHFfd3Jfc2l6ZSA9IFNDUjFfSUZVX1FVRVVFX1dSX05PTkU7CisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX05WICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfSEk7CisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX05WICAgICAgIDogcV93cl9zaXplID0gKGluc3RyX2J5cGFzc192ZCAmIGlkdTJpZnVfcmR5X2kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSUZVX1FVRVVFX1dSX0hJOworICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9ISV9SVklfTE86IHFfd3Jfc2l6ZSA9IChpbnN0cl9ieXBhc3NfdmQgJiBpZHUyaWZ1X3JkeV9pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfSUZVX1FVRVVFX1dSX05PTkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOworICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVkMsCisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQywKKyAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfUlZJX0hJLAorICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9MT19SVklfSEk6IHFfd3Jfc2l6ZSA9IChpbnN0cl9ieXBhc3NfdmQgJiBpZHUyaWZ1X3JkeV9pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNDUjFfSUZVX1FVRVVFX1dSX0hJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfUVVFVUVfV1JfRlVMTDsKKyAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQorYGVsc2UgLy8gU0NSMV9OT19ERUNfU1RBR0UKKyAgICAgICAgICAgIGNhc2UgKGluc3RyX3R5cGUpCisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfTk9ORSAgICAgICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfTk9ORTsKKyAgICAgICAgICAgICAgICBTQ1IxX0lGVV9JTlNUUl9SVkNfTlYsCisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX05WICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfSEk7CisgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgIDogcV93cl9zaXplID0gU0NSMV9JRlVfUVVFVUVfV1JfRlVMTDsKKyAgICAgICAgICAgIGVuZGNhc2UgLy8gaW5zdHJfdHlwZQorYGVuZGlmIC8vIFNDUjFfTk9fREVDX1NUQUdFCisgICAgICAgIGVuZCBlbHNlIGlmIChpbWVtX3Jlc3BfZXIpIGJlZ2luCisgICAgICAgICAgICBxX3dyX3NpemUgPSBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMOworICAgICAgICBlbmQgLy8gaW1lbV9yZXNwX2VyCisgICAgZW5kIC8vIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEKK2VuZAorCithc3NpZ24gcV93cl9ub25lICAgPSAocV93cl9zaXplID09IFNDUjFfSUZVX1FVRVVFX1dSX05PTkUpOworYXNzaWduIHFfd3JfZnVsbCAgID0gKHFfd3Jfc2l6ZSA9PSBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMKTsKKworLy8gV3JpdGUvcmVhZCBwb2ludGVyIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHFfZmx1c2hfcmVxID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgfCBwaXBlMmlmdV9zdG9wX2ZldGNoX2k7CisKKy8vIFF1ZXVlIHdyaXRlIHBvaW50ZXIgcmVnaXN0ZXIKK2Fzc2lnbiBxX3dwdHJfdXBkICA9IHFfZmx1c2hfcmVxIHwgfnFfd3Jfbm9uZTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgcV93cHRyIDw9ICcwOworICAgIGVuZCBlbHNlIGlmIChxX3dwdHJfdXBkKSBiZWdpbgorICAgICAgICBxX3dwdHIgPD0gcV93cHRyX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHFfd3B0cl9uZXh0ID0gcV9mbHVzaF9yZXEgPyAnMAorICAgICAgICAgICAgICAgICAgIDogfnFfd3Jfbm9uZSAgPyBxX3dwdHIgKyAocV93cl9mdWxsID8gMidkMiA6IDEnYjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHFfd3B0cjsKKworLy8gUXVldWUgcmVhZCBwb2ludGVyIHJlZ2lzdGVyCithc3NpZ24gcV9ycHRyX3VwZCAgPSBxX2ZsdXNoX3JlcSB8IH5xX3JkX25vbmU7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHFfcnB0ciA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAocV9ycHRyX3VwZCkgYmVnaW4KKyAgICAgICAgcV9ycHRyIDw9IHFfcnB0cl9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBxX3JwdHJfbmV4dCA9IHFfZmx1c2hfcmVxID8gJzAKKyAgICAgICAgICAgICAgICAgICA6IH5xX3JkX25vbmUgID8gcV9ycHRyICsgKHFfcmRfaHdvcmQgPyAxJ2IxIDogMidkMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcV9ycHRyOworCisvLyBRdWV1ZSBkYXRhIGFuZCBlcnJvciBmbGFnIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGltZW1fcmRhdGFfaGkgPSBpbWVtMmlmdV9yZGF0YV9pWzMxOjE2XTsKK2Fzc2lnbiBpbWVtX3JkYXRhX2xvID0gaW1lbTJpZnVfcmRhdGFfaVsxNTowXTsKKworYXNzaWduIHFfd3JfZW4gPSBpbWVtX3Jlc3BfdmQgJiB+cV9mbHVzaF9yZXE7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHFfZGF0YSAgPD0gJ3tTQ1IxX0lGVV9RX1NJWkVfSEFMRnsnMH19OworICAgICAgICBxX2VyciAgIDw9ICd7U0NSMV9JRlVfUV9TSVpFX0hBTEZ7MSdiMH19OworICAgIGVuZCBlbHNlIGlmIChxX3dyX2VuKSBiZWdpbgorICAgICAgICBjYXNlIChxX3dyX3NpemUpCisgICAgICAgICAgICBTQ1IxX0lGVV9RVUVVRV9XUl9ISSAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgcV9kYXRhW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmRhdGFfaGk7CisgICAgICAgICAgICAgICAgcV9lcnIgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIpXSAgICAgICAgIDw9IGltZW1fcmVzcF9lcjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9JRlVfUVVFVUVfV1JfRlVMTCAgOiBiZWdpbgorICAgICAgICAgICAgICAgIHFfZGF0YVtTQ1IxX0lGVV9RVUVVRV9BRFJfVycocV93cHRyKV0gICAgICAgICA8PSBpbWVtX3JkYXRhX2xvOworICAgICAgICAgICAgICAgIHFfZXJyIFtTQ1IxX0lGVV9RVUVVRV9BRFJfVycocV93cHRyKV0gICAgICAgICA8PSBpbWVtX3Jlc3BfZXI7CisgICAgICAgICAgICAgICAgcV9kYXRhW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIgKyAxJ2IxKV0gIDw9IGltZW1fcmRhdGFfaGk7CisgICAgICAgICAgICAgICAgcV9lcnIgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3dwdHIgKyAxJ2IxKV0gIDw9IGltZW1fcmVzcF9lcjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYXNzaWduIHFfZGF0YV9oZWFkID0gcV9kYXRhIFtTQ1IxX0lGVV9RVUVVRV9BRFJfVycocV9ycHRyKV07Cithc3NpZ24gcV9kYXRhX25leHQgPSBxX2RhdGEgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3JwdHIgKyAxJ2IxKV07Cithc3NpZ24gcV9lcnJfaGVhZCAgPSBxX2VyciAgW1NDUjFfSUZVX1FVRVVFX0FEUl9XJyhxX3JwdHIpXTsKK2Fzc2lnbiBxX2Vycl9uZXh0ICA9IHFfZXJyICBbU0NSMV9JRlVfUVVFVUVfQURSX1cnKHFfcnB0ciArIDEnYjEpXTsKKworLy8gUXVldWUgc3RhdHVzIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gcV9vY3BkX2ggICAgICAgICA9IFNDUjFfSUZVX1FfRlJFRV9IX1cnKHFfd3B0ciAtIHFfcnB0cik7Cithc3NpZ24gcV9mcmVlX2hfbmV4dCAgICA9IFNDUjFfSUZVX1FfRlJFRV9IX1cnKFNDUjFfSUZVX1FfU0laRV9IQUxGIC0gKHFfd3B0ciAtIHFfcnB0cl9uZXh0KSk7Cithc3NpZ24gcV9mcmVlX3dfbmV4dCAgICA9IFNDUjFfSUZVX1FfRlJFRV9XX1cnKHFfZnJlZV9oX25leHQgPj4gMSdiMSk7CisKK2Fzc2lnbiBxX2lzX2VtcHR5ICAgICAgID0gKHFfcnB0ciA9PSBxX3dwdHIpOworYXNzaWduIHFfaGFzX2ZyZWVfc2xvdHMgPSAoU0NSMV9UWE5fQ05UX1cnKHFfZnJlZV93X25leHQpID4gaW1lbV92ZF9wbmRfdHhuc19jbnQpOworYXNzaWduIHFfaGFzXzFfb2NwZF9odyAgPSAocV9vY3BkX2ggPT0gU0NSMV9JRlVfUV9GUkVFX0hfVycoMSkpOworCithc3NpZ24gcV9oZWFkX2lzX3J2aSAgICA9ICYocV9kYXRhX2hlYWRbMTowXSk7Cithc3NpZ24gcV9oZWFkX2lzX3J2YyAgICA9IH5xX2hlYWRfaXNfcnZpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSUZVIEZTTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSUZVIEZTTSBjb250cm9sIHNpZ25hbHMKK2Fzc2lnbiBpZnVfZmV0Y2hfcmVxID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgJiB+cGlwZTJpZnVfc3RvcF9mZXRjaF9pOworYXNzaWduIGlmdV9zdG9wX3JlcSAgPSBwaXBlMmlmdV9zdG9wX2ZldGNoX2kKKyAgICAgICAgICAgICAgICAgICAgIHwgKGltZW1fcmVzcF9lcl9kaXNjYXJkX3BuZCAmIH5leHUyaWZ1X3BjX25ld19yZXFfaSk7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGlmdV9mc21fY3VyciA8PSBTQ1IxX0lGVV9GU01fSURMRTsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZnVfZnNtX2N1cnIgPD0gaWZ1X2ZzbV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoaWZ1X2ZzbV9jdXJyKQorICAgICAgICBTQ1IxX0lGVV9GU01fSURMRSAgIDogYmVnaW4KKyAgICAgICAgICAgIGlmdV9mc21fbmV4dCA9IGlmdV9mZXRjaF9yZXEgPyBTQ1IxX0lGVV9GU01fRkVUQ0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX0lGVV9GU01fSURMRTsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfSUZVX0ZTTV9GRVRDSCAgOiBiZWdpbgorICAgICAgICAgICAgaWZ1X2ZzbV9uZXh0ID0gaWZ1X3N0b3BfcmVxICA/IFNDUjFfSUZVX0ZTTV9JRExFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9JRlVfRlNNX0ZFVENIOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIGlmdV9mc21fZmV0Y2ggPSAoaWZ1X2ZzbV9jdXJyID09IFNDUjFfSUZVX0ZTTV9GRVRDSCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJRlUgPC0+IElNRU0gaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBJRlUgPC0+IElNRU0gaW50ZXJmYWNlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIElNRU0gcmVzcG9uc2UgbG9naWMKKyAvLyAtIElNRU0gYWRkcmVzcyByZWdpc3RlcgorIC8vIC0gUGVuZGluZyBJTUVNIHRyYW5zYWN0aW9ucyBjb3VudGVyCisgLy8gLSBJTUVNIGRpc2NhcmQgcmVzcG9uc2VzIGNvdW50ZXIKKyAvLyAtIElGVSA8LT4gSU1FTSBpbnRlcmZhY2Ugb3V0cHV0IHNpZ25hbHMKKy8vCisKKy8vIElNRU0gcmVzcG9uc2UgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBpbWVtX3Jlc3BfZXIgICAgICAgICAgICAgPSAoaW1lbTJpZnVfcmVzcF9pID09IFNDUjFfTUVNX1JFU1BfUkRZX0VSKTsKK2Fzc2lnbiBpbWVtX3Jlc3Bfb2sgICAgICAgICAgICAgPSAoaW1lbTJpZnVfcmVzcF9pID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKTsKK2Fzc2lnbiBpbWVtX3Jlc3BfcmVjZWl2ZWQgICAgICAgPSBpbWVtX3Jlc3Bfb2sgfCBpbWVtX3Jlc3BfZXI7Cithc3NpZ24gaW1lbV9yZXNwX3ZkICAgICAgICAgICAgID0gaW1lbV9yZXNwX3JlY2VpdmVkICYgfmltZW1fcmVzcF9kaXNjYXJkX3JlcTsKK2Fzc2lnbiBpbWVtX3Jlc3BfZXJfZGlzY2FyZF9wbmQgPSBpbWVtX3Jlc3BfZXIgJiB+aW1lbV9yZXNwX2Rpc2NhcmRfcmVxOworCithc3NpZ24gaW1lbV9oYW5kc2hha2VfZG9uZSA9IGlmdTJpbWVtX3JlcV9vICYgaW1lbTJpZnVfcmVxX2Fja19pOworCisvLyBJTUVNIGFkZHJlc3MgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBpbWVtX2FkZHJfdXBkID0gaW1lbV9oYW5kc2hha2VfZG9uZSB8IGV4dTJpZnVfcGNfbmV3X3JlcV9pOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpbWVtX2FkZHJfZmYgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYgKGltZW1fYWRkcl91cGQpIGJlZ2luCisgICAgICAgIGltZW1fYWRkcl9mZiA8PSBpbWVtX2FkZHJfbmV4dDsKKyAgICBlbmQKK2VuZAorCitgaWZuZGVmIFNDUjFfTkVXX1BDX1JFRworYXNzaWduIGltZW1fYWRkcl9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgPyBleHUyaWZ1X3BjX25ld19pW2BTQ1IxX1hMRU4tMToyXSAgICAgICAgICAgICAgICAgKyBpbWVtX2hhbmRzaGFrZV9kb25lCisgICAgICAgICAgICAgICAgICAgICAgOiAmaW1lbV9hZGRyX2ZmWzU6Ml0gICA/IGltZW1fYWRkcl9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGltZW1faGFuZHNoYWtlX2RvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge2ltZW1fYWRkcl9mZltgU0NSMV9YTEVOLTE6Nl0sIGltZW1fYWRkcl9mZls1OjJdICsgaW1lbV9oYW5kc2hha2VfZG9uZX07CitgZWxzZSAvLyBTQ1IxX05FV19QQ19SRUcKK2Fzc2lnbiBpbWVtX2FkZHJfbmV4dCA9IGV4dTJpZnVfcGNfbmV3X3JlcV9pID8gZXh1MmlmdV9wY19uZXdfaVtgU0NSMV9YTEVOLTE6Ml0KKyAgICAgICAgICAgICAgICAgICAgICA6ICZpbWVtX2FkZHJfZmZbNToyXSAgID8gaW1lbV9hZGRyX2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW1lbV9oYW5kc2hha2VfZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7aW1lbV9hZGRyX2ZmW2BTQ1IxX1hMRU4tMTo2XSwgaW1lbV9hZGRyX2ZmWzU6Ml0gKyBpbWVtX2hhbmRzaGFrZV9kb25lfTsKK2BlbmRpZiAvLyBTQ1IxX05FV19QQ19SRUcKKworLy8gUGVuZGluZyBJTUVNIHRyYW5zYWN0aW9ucyBjb3VudGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGVuZGluZyBJTUVNIHRyYW5zYWN0aW9ucyBvY2N1ciBpZiBJRlUgcmVxdWVzdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQsIGJ1dAorLy8gcmVzcG9uc2UgY29tZXMgaW4gdGhlIG5leHQgY3ljbGUgb3IgbGF0ZXIKKworYXNzaWduIGltZW1fcG5kX3R4bnNfY250X3VwZCAgPSBpbWVtX2hhbmRzaGFrZV9kb25lIF4gaW1lbV9yZXNwX3JlY2VpdmVkOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBpbWVtX3BuZF90eG5zX2NudCA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoaW1lbV9wbmRfdHhuc19jbnRfdXBkKSBiZWdpbgorICAgICAgICBpbWVtX3BuZF90eG5zX2NudCA8PSBpbWVtX3BuZF90eG5zX2NudF9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBpbWVtX3BuZF90eG5zX2NudF9uZXh0ID0gaW1lbV9wbmRfdHhuc19jbnQgKyAoaW1lbV9oYW5kc2hha2VfZG9uZSAtIGltZW1fcmVzcF9yZWNlaXZlZCk7Cithc3NpZ24gaW1lbV9wbmRfdHhuc19xX2Z1bGwgICA9ICZpbWVtX3BuZF90eG5zX2NudDsKKworLy8gSU1FTSBkaXNjYXJkIHJlc3BvbnNlcyBjb3VudGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSU1FTSBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlIGRpc2NhcmRlZCBpbiB0aGUgZm9sbG93aW5nIDIgY2FzZXM6CisvLyAxLiBOZXcgUEMgaXMgcmVxdWVzdGVkIGJ5IGp1bXAsIGJyYW5jaCwgbXJldCBvciBvdGhlciBpbnN0cnVjdGlvbgorLy8gMi4gSU1FTSByZXNwb25zZSB3YXMgZXJyb25lb3VzIGFuZCBub3QgZGlzY2FyZGVkCisvLworLy8gSW4gYm90aCBjYXNlcyB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgZXF1YWxzIHRvIHRoZSBudW1iZXIKKy8vIG9mIHBlbmRpbmcgaW5zdHJ1Y3Rpb25zLgorLy8gSW4gdGhlIDFzdCBjYXNlIHdlIGRvbid0IG5lZWQgYWxsIHRoZSBpbnN0cnVjdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gZmV0Y2hlZAorLy8geWV0LCBzaW5jZSB0aGUgUEMgaGFzIGNoYW5nZWQuCisvLyBJbiB0aGUgMm5kIGNhc2UsIHNpbmNlIHRoZSBJTUVNIHJlc3BvbmNlIHdhcyBlcnJvbmVvdXMgdGhlcmUgaXMgbm8gZ3VhcmFudGVlCisvLyB0aGF0IHN1YnNlcXVlbnQgSU1FTSBpbnN0cnVjdGlvbnMgd291bGQgYmUgdmFsaWQuCisKK2Fzc2lnbiBpbWVtX3Jlc3BfZGlzY2FyZF9jbnRfdXBkID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgfCBpbWVtX3Jlc3BfZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGltZW1fcmVzcF9vayAmIGltZW1fcmVzcF9kaXNjYXJkX3JlcSk7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGltZW1fcmVzcF9kaXNjYXJkX2NudCA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoaW1lbV9yZXNwX2Rpc2NhcmRfY250X3VwZCkgYmVnaW4KKyAgICAgICAgaW1lbV9yZXNwX2Rpc2NhcmRfY250IDw9IGltZW1fcmVzcF9kaXNjYXJkX2NudF9uZXh0OworICAgIGVuZAorZW5kCisKK2BpZm5kZWYgU0NSMV9ORVdfUENfUkVHCithc3NpZ24gaW1lbV9yZXNwX2Rpc2NhcmRfY250X25leHQgPSBleHUyaWZ1X3BjX25ld19yZXFfaSAgICAgPyBpbWVtX3BuZF90eG5zX2NudF9uZXh0IC0gaW1lbV9oYW5kc2hha2VfZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2VyX2Rpc2NhcmRfcG5kID8gaW1lbV9wbmRfdHhuc19jbnRfbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZXNwX2Rpc2NhcmRfY250IC0gMSdiMTsKK2BlbHNlIC8vIFNDUjFfTkVXX1BDX1JFRworYXNzaWduIGltZW1fcmVzcF9kaXNjYXJkX2NudF9uZXh0ID0gZXh1MmlmdV9wY19uZXdfcmVxX2kgfCBpbWVtX3Jlc3BfZXJfZGlzY2FyZF9wbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltZW1fcG5kX3R4bnNfY250X25leHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGltZW1fcmVzcF9kaXNjYXJkX2NudCAtIDEnYjE7CitgZW5kaWYgLy8gU0NSMV9ORVdfUENfUkVHCisKK2Fzc2lnbiBpbWVtX3ZkX3BuZF90eG5zX2NudCAgPSBpbWVtX3BuZF90eG5zX2NudCAtIGltZW1fcmVzcF9kaXNjYXJkX2NudDsKK2Fzc2lnbiBpbWVtX3Jlc3BfZGlzY2FyZF9yZXEgPSB8aW1lbV9yZXNwX2Rpc2NhcmRfY250OworCisvLyBJRlUgPC0+IElNRU0gaW50ZXJmYWNlIG91dHB1dCBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaWZuZGVmIFNDUjFfTkVXX1BDX1JFRworYXNzaWduIGlmdTJpbWVtX3JlcV9vICA9IChleHUyaWZ1X3BjX25ld19yZXFfaSAmIH5pbWVtX3BuZF90eG5zX3FfZnVsbCAmIH5waXBlMmlmdV9zdG9wX2ZldGNoX2kpCisgICAgICAgICAgICAgICAgICAgICAgIHwgKGlmdV9mc21fZmV0Y2ggICAgICAgICYgfmltZW1fcG5kX3R4bnNfcV9mdWxsICYgcV9oYXNfZnJlZV9zbG90cyk7Cithc3NpZ24gaWZ1MmltZW1fYWRkcl9vID0gZXh1MmlmdV9wY19uZXdfcmVxX2kKKyAgICAgICAgICAgICAgICAgICAgICAgPyB7ZXh1MmlmdV9wY19uZXdfaVtgU0NSMV9YTEVOLTE6Ml0sIDInYjAwfQorICAgICAgICAgICAgICAgICAgICAgICA6IHtpbWVtX2FkZHJfZmYsIDInYjAwfTsKK2BlbHNlIC8vIFNDUjFfTkVXX1BDX1JFRworYXNzaWduIGlmdTJpbWVtX3JlcV9vICA9IGlmdV9mc21fZmV0Y2ggJiB+aW1lbV9wbmRfdHhuc19xX2Z1bGwgJiBxX2hhc19mcmVlX3Nsb3RzOworYXNzaWduIGlmdTJpbWVtX2FkZHJfbyA9IHtpbWVtX2FkZHJfZmYsIDInYjAwfTsKK2BlbmRpZiAvLyBTQ1IxX05FV19QQ19SRUcKKworYXNzaWduIGlmdTJpbWVtX2NtZF9vICA9IFNDUjFfTUVNX0NNRF9SRDsKKworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorYXNzaWduIGlmdTJwaXBlX2ltZW1fdHhuc19wbmRfbyA9IHxpbWVtX3BuZF90eG5zX2NudDsKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElGVSA8LT4gSURVIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIEluc3RydWN0aW9uIGJ5cGFzcyB0eXBlIGRlY29kZXIKKyAvLyAtIElGVSA8LT4gSURVIHN0YXR1cyBzaWduYWxzCisgLy8gLSBPdXRwdXQgaW5zdHJ1Y3Rpb24gbXVsdGlwbGV4ZXIKKy8vCisKK2BpZmRlZiBTQ1IxX05PX0RFQ19TVEFHRQorCisvLyBJbnN0cnVjdGlvbiBieXBhc3MgdHlwZSBkZWNvZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gaW5zdHJfYnlwYXNzX3ZkICA9IChpbnN0cl9ieXBhc3NfdHlwZSAhPSBTQ1IxX0JZUEFTU19OT05FKTsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpbnN0cl9ieXBhc3NfdHlwZSAgICA9IFNDUjFfQllQQVNTX05PTkU7CisKKyAgICBpZiAoaW1lbV9yZXNwX3ZkKSBiZWdpbgorICAgICAgICBpZiAocV9pc19lbXB0eSkgYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKGluc3RyX3R5cGUpCisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZDX05WLAorICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWQ19SVkMsCisgICAgICAgICAgICAgICAgU0NSMV9JRlVfSU5TVFJfUlZJX0xPX1JWQyAgICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc190eXBlID0gU0NSMV9CWVBBU1NfUlZDOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIFNDUjFfSUZVX0lOU1RSX1JWSV9ISV9SVklfTE8gICAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpbnN0cl9ieXBhc3NfdHlwZSA9IFNDUjFfQllQQVNTX1JWSV9SREFUQTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4gZW5kCisgICAgICAgICAgICBlbmRjYXNlIC8vIGluc3RyX3R5cGUKKyAgICAgICAgZW5kIGVsc2UgaWYgKHFfaGFzXzFfb2NwZF9odyAmIHFfaGVhZF9pc19ydmkpIGJlZ2luCisgICAgICAgICAgICBpZiAoaW5zdHJfaGlfcnZpX2xvX2ZmKSBiZWdpbgorICAgICAgICAgICAgICAgIGluc3RyX2J5cGFzc190eXBlID0gU0NSMV9CWVBBU1NfUlZJX1JEQVRBX1FVRVVFOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZCAvLyBpbWVtX3Jlc3BfdmQKK2VuZAorCisvLyBJRlUgPC0+IElEVSBpbnRlcmZhY2Ugc3RhdHVzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgPSAxJ2IwOworICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgID0gMSdiMDsKKyAgICBpZnUyaWR1X2Vycl9ydmlfaGlfbyA9IDEnYjA7CisKKyAgICBpZiAoaWZ1X2ZzbV9mZXRjaCB8IH5xX2lzX2VtcHR5KSBiZWdpbgorICAgICAgICBpZiAoaW5zdHJfYnlwYXNzX3ZkKSBiZWdpbgorICAgICAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgICA9IChpbnN0cl9ieXBhc3NfdHlwZSA9PSBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaW1lbV9yZXNwX2VyIHwgcV9lcnJfaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGltZW1fcmVzcF9lcjsKKyAgICAgICAgICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vICA9IChpbnN0cl9ieXBhc3NfdHlwZSA9PSBTQ1IxX0JZUEFTU19SVklfUkRBVEFfUVVFVUUpICYgaW1lbV9yZXNwX2VyOworICAgICAgICBlbmQgZWxzZSBpZiAofnFfaXNfZW1wdHkpIGJlZ2luCisgICAgICAgICAgICBpZiAocV9oYXNfMV9vY3BkX2h3KSBiZWdpbgorICAgICAgICAgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgID0gcV9oZWFkX2lzX3J2YyB8IHFfZXJyX2hlYWQ7CisgICAgICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgPSBxX2Vycl9oZWFkOworICAgICAgICAgICAgICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vID0gfnFfZXJyX2hlYWQgJiBxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgaWZ1MmlkdV92ZF9vICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgID0gcV9lcnJfaGVhZCA/IDEnYjEgOiAocV9oZWFkX2lzX3J2aSAmIHFfZXJyX25leHQpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAvLyB+cV9pc19lbXB0eQorICAgIGVuZAorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgaWYgKGhkdTJpZnVfcGJ1Zl9mZXRjaF9pKSBiZWdpbgorICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSBoZHUyaWZ1X3BidWZfdmRfaTsKKyAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gaGR1MmlmdV9wYnVmX2Vycl9pOworICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCitlbmQKKworLy8gT3V0cHV0IGluc3RydWN0aW9uIG11bHRpcGxleGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNhc2UgKGluc3RyX2J5cGFzc190eXBlKQorICAgICAgICBTQ1IxX0JZUEFTU19SVkMgICAgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICBpZnUyaWR1X2luc3RyX28gPSBgU0NSMV9JTUVNX0RXSURUSCcobmV3X3BjX3VuYWxpZ25lZF9mZiA/IGltZW1fcmRhdGFfaGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW1lbV9yZGF0YV9sbyk7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0JZUEFTU19SVklfUkRBVEEgICAgICA6IGJlZ2luCisgICAgICAgICAgICBpZnUyaWR1X2luc3RyX28gPSBpbWVtMmlmdV9yZGF0YV9pOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9CWVBBU1NfUlZJX1JEQVRBX1FVRVVFOiBiZWdpbgorICAgICAgICAgICAgaWZ1MmlkdV9pbnN0cl9vID0ge2ltZW1fcmRhdGFfbG8sIHFfZGF0YV9oZWFkfTsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgIDogYmVnaW4KKyAgICAgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGBTQ1IxX0lNRU1fRFdJRFRIJyhxX2hlYWRfaXNfcnZjID8gcV9kYXRhX2hlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge3FfZGF0YV9uZXh0LCBxX2RhdGFfaGVhZH0pOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlIC8vIGluc3RyX2J5cGFzc190eXBlCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBpZiAoaGR1MmlmdV9wYnVmX2ZldGNoX2kpIGJlZ2luCisgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGBTQ1IxX0lNRU1fRFdJRFRIJyh7JzAsIGhkdTJpZnVfcGJ1Zl9pbnN0cl9pfSk7CisgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2VuZAorCitgZWxzZSAgIC8vIFNDUjFfTk9fREVDX1NUQUdFCisKKy8vIElGVSA8LT4gSURVIGludGVyZmFjZSBzdGF0dXMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSAxJ2IwOworICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgICA9IDEnYjA7CisgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gID0gMSdiMDsKKyAgICBpZiAofnFfaXNfZW1wdHkpIGJlZ2luCisgICAgICAgIGlmIChxX2hhc18xX29jcGRfaHcpIGJlZ2luCisgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSBxX2hlYWRfaXNfcnZjIHwgcV9lcnJfaGVhZDsKKyAgICAgICAgICAgIGlmdTJpZHVfaW1lbV9lcnJfbyAgICA9IHFfZXJyX2hlYWQ7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICBpZnUyaWR1X3ZkX28gICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgaWZ1MmlkdV9pbWVtX2Vycl9vICAgID0gcV9lcnJfaGVhZCA/IDEnYjEgOiAocV9oZWFkX2lzX3J2aSAmIHFfZXJyX25leHQpOworICAgICAgICAgICAgaWZ1MmlkdV9lcnJfcnZpX2hpX28gID0gfnFfZXJyX2hlYWQgJiBxX2hlYWRfaXNfcnZpICYgcV9lcnJfbmV4dDsKKyAgICAgICAgZW5kCisgICAgZW5kIC8vIH5xX2lzX2VtcHR5CitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBpZiAoaGR1MmlmdV9wYnVmX2ZldGNoX2kpIGJlZ2luCisgICAgICAgIGlmdTJpZHVfdmRfbyAgICAgICAgICA9IGhkdTJpZnVfcGJ1Zl92ZF9pOworICAgICAgICBpZnUyaWR1X2ltZW1fZXJyX28gICAgPSBoZHUyaWZ1X3BidWZfZXJyX2k7CisgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2VuZAorCisvLyBPdXRwdXQgaW5zdHJ1Y3Rpb24gbXVsdGlwbGV4ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWZ1MmlkdV9pbnN0cl9vID0gcV9oZWFkX2lzX3J2YyA/IGBTQ1IxX0lNRU1fRFdJRFRIJyhxX2RhdGFfaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge3FfZGF0YV9uZXh0LCBxX2RhdGFfaGVhZH07CitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBpZiAoaGR1MmlmdV9wYnVmX2ZldGNoX2kpIGJlZ2luCisgICAgICAgIGlmdTJpZHVfaW5zdHJfbyA9IGBTQ1IxX0lNRU1fRFdJRFRIJyh7JzAsIGhkdTJpZnVfcGJ1Zl9pbnN0cl9pfSk7CisgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2VuZAorCitgZW5kaWYgIC8vIFNDUjFfTk9fREVDX1NUQUdFCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorYXNzaWduIGlmdTJoZHVfcGJ1Zl9yZHlfbyA9IGlkdTJpZnVfcmR5X2k7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBYIGNoZWNrcworCitTQ1IxX1NWQV9JRlVfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHtpbWVtMmlmdV9yZXFfYWNrX2ksIGlkdTJpZnVfcmR5X2ksIGV4dTJpZnVfcGNfbmV3X3JlcV9pfSkKKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IHVua25vd24gdmFsdWVzIik7CisKK1NDUjFfU1ZBX0lGVV9YQ0hFQ0tfUkVRIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGlmdTJpbWVtX3JlcV9vIHwtPiAhJGlzdW5rbm93bih7aWZ1MmltZW1fYWRkcl9vLCBpZnUyaW1lbV9jbWRfb30pCisgICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiB1bmtub3duIHtpZnUyaW1lbV9hZGRyX28sIGlmdTJpbWVtX2NtZF9vfSIpOworCisvLyBCZWhhdmlvciBjaGVja3MKKworU0NSMV9TVkFfSUZVX0RSQ19VTkRFUkZMT1cgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgfmltZW1fcmVzcF9kaXNjYXJkX3JlcSB8PT4gfihpbWVtX3Jlc3BfZGlzY2FyZF9jbnQgPT0gU0NSMV9UWE5fQ05UX1cnKCcxKSkKKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGltZW1fcmVzcF9kaXNjYXJkX2NudCB1bmRlcmZsb3ciKTsKKworU0NSMV9TVkFfSUZVX0RSQ19SQU5HRSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAoaW1lbV9yZXNwX2Rpc2NhcmRfY250ID49IDApICYgKGltZW1fcmVzcF9kaXNjYXJkX2NudCA8PSBpbWVtX3BuZF90eG5zX2NudCkKKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGltZW1fcmVzcF9kaXNjYXJkX2NudCBvdXQgb2YgcmFuZ2UiKTsKKworU0NSMV9TVkFfSUZVX1FVRVVFX09WRiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAocV9vY3BkX2ggPj0gU0NSMV9JRlVfUV9GUkVFX0hfVycoU0NSMV9JRlVfUV9TSVpFX0hBTEYtMSkpIHwtPgorICAgICgocV9vY3BkX2ggPT0gU0NSMV9JRlVfUV9GUkVFX0hfVycoU0NSMV9JRlVfUV9TSVpFX0hBTEYtMSkpID8gKHFfd3Jfc2l6ZSAhPSBTQ1IxX0lGVV9RVUVVRV9XUl9GVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHFfd3Jfc2l6ZSA9PSBTQ1IxX0lGVV9RVUVVRV9XUl9OT05FKSkKKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IHF1ZXVlIG92ZXJmbG93Iik7CisKK1NDUjFfU1ZBX0lGVV9JTUVNX0VSUl9CRUggOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgKGltZW1fcmVzcF9lciAmIH5pbWVtX3Jlc3BfZGlzY2FyZF9yZXEgJiB+ZXh1MmlmdV9wY19uZXdfcmVxX2kpIHw9PgorICAgIChpZnVfZnNtX2N1cnIgPT0gU0NSMV9JRlVfRlNNX0lETEUpICYgKGltZW1fcmVzcF9kaXNjYXJkX2NudCA9PSBpbWVtX3BuZF90eG5zX2NudCkKKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGluY29ycmVjdCBiZWhhdmlvciBhZnRlciBtZW1vcnkgZXJyb3IiKTsKKworU0NSMV9TVkFfSUZVX05FV19QQ19SRVFfQkVIIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGV4dTJpZnVfcGNfbmV3X3JlcV9pIHw9PiBxX2lzX2VtcHR5CisgICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiBpbmNvcnJlY3QgYmVoYXZpb3IgYWZ0ZXIgZXh1MmlmdV9wY19uZXdfcmVxX2kiKTsKKworU0NSMV9TVkFfSUZVX0lNRU1fQUREUl9BTElHTkVEIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGlmdTJpbWVtX3JlcV9vIHwtPiB+fGlmdTJpbWVtX2FkZHJfb1sxOjBdCisgICAgKSBlbHNlICRlcnJvcigiSUZVIEVycm9yOiB1bmFsaWduZWQgSU1FTSBhY2Nlc3MiKTsKKworU0NSMV9TVkFfSUZVX1NUT1BfRkVUQ0ggOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgcGlwZTJpZnVfc3RvcF9mZXRjaF9pIHw9PiAoaWZ1X2ZzbV9jdXJyID09IFNDUjFfSUZVX0ZTTV9JRExFKQorICAgICkgZWxzZSAkZXJyb3IoIklGVSBFcnJvcjogZmV0Y2ggbm90IHN0b3BwZWQiKTsKKworU0NSMV9TVkFfSUZVX0lNRU1fRkFVTFRfUlZJX0hJIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGlmdTJpZHVfZXJyX3J2aV9oaV9vIHwtPiBpZnUyaWR1X2ltZW1fZXJyX28KKyAgICApIGVsc2UgJGVycm9yKCJJRlUgRXJyb3I6IGlmdTJpZHVfaW1lbV9lcnJfbyA9PSAwIik7CisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfaWZ1CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2xzdS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg3OTkzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX2xzdS5zdgpAQCAtMCwwICsxLDM1MSBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX2xzdS5zdj4KKy8vLyBAYnJpZWYgICAgICBMb2FkL1N0b3JlIFVuaXQgKExTVSkKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIFBlcmZvcm1zIGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMgaW4gRGF0YSBNZW1vcnkKKyAvLyAtIEdlbmVyYXRlcyBETUVNIGFkZHJlc3MgbWlzYWxpZ24gYW5kIGFjY2VzcyBmYXVsdCBleGNlcHRpb25zCisgLy8gLSBQYXNzZXMgRE1FTSBvcGVyYXRpb25zIGluZm9ybWF0aW9uIHRvIFREVSBhbmQgZ2VuZXJhdGVzIExTVSBicmVha3BvaW50IGV4Y2VwdGlvbgorIC8vCisgLy8gU3RydWN0dXJlOgorIC8vIC0gRlNNCisgLy8gLSBFeGNlcHRpb25zIGxvZ2ljCisgLy8gLSBMU1UgPC0+IEVYVSBpbnRlcmZhY2UKKyAvLyAtIExTVSA8LT4gRE1FTSBpbnRlcmZhY2UKKyAvLyAtIExTVSA8LT4gVERVIGludGVyZmFjZQorIC8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgorYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGluY2x1ZGUgInNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCIKK2BpZmRlZiBTQ1IxX1REVV9FTgorYGluY2x1ZGUgInNjcjFfdGR1LnN2aCIKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCittb2R1bGUgc2NyMV9waXBlX2xzdSAoCisgICAgLy8gQ29tbW9uCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gTFNVIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gTFNVIGNsb2NrCisKKyAgICAvLyBMU1UgPC0+IEVYVSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJsc3VfcmVxX2ksICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIExTVQorICAgIGlucHV0ICAgdHlwZV9zY3IxX2xzdV9jbWRfc2VsX2UgICAgICAgICAgICAgZXh1MmxzdV9jbWRfaSwgICAgICAgICAgICAgIC8vIExTVSBjb21tYW5kCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUybHN1X2FkZHJfaSwgICAgICAgICAgICAgLy8gQWRkcmVzcyBvZiBETUVNCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBleHUybHN1X3NkYXRhX2ksICAgICAgICAgICAgLy8gRGF0YSBmb3Igc3RvcmUKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdTJleHVfcmR5X28sICAgICAgICAgICAgICAvLyBMU1UgcmVjZWl2ZWQgRE1FTSByZXNwb25zZQorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbHN1MmV4dV9sZGF0YV9vLCAgICAgICAgICAgIC8vIExvYWQgZGF0YQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN1MmV4dV9leGNfbywgICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbiBmcm9tIExTVQorICAgIG91dHB1dCAgdHlwZV9zY3IxX2V4Y19jb2RlX2UgICAgICAgICAgICAgICAgbHN1MmV4dV9leGNfY29kZV9vLCAgICAgICAgIC8vIEV4Y2VwdGlvbiBjb2RlCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgIC8vIExTVSA8LT4gVERVIGludGVyZmFjZQorICAgIG91dHB1dCAgdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zICAgICAgICAgICAgbHN1MnRkdV9kbW9uX28sICAgICAgICAgICAgIC8vIERhdGEgYWRkcmVzcyBzdHJlYW0gbW9uaXRvcmluZworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pLCAgIC8vIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUybHN1X2RicmtwdF9leGNfcmVxX2ksICAgLy8gRGF0YSBCUCBleGNlcHRpb24gcmVxdWVzdAorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKyAgICAvLyBMU1UgPC0+IERNRU0gaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3UyZG1lbV9yZXFfbywgICAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVxdWVzdAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgbHN1MmRtZW1fY21kX28sICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IGNvbW1hbmQgKFJFQUQvV1JJVEUpCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICBsc3UyZG1lbV93aWR0aF9vLCAgICAgICAgICAgLy8gRGF0YSBtZW1vcnkgZGF0YSB3aWR0aAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgbHN1MmRtZW1fYWRkcl9vLCAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IGFkZHJlc3MKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGxzdTJkbWVtX3dkYXRhX28sICAgICAgICAgICAvLyBEYXRhIG1lbW9yeSB3cml0ZSBkYXRhCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtMmxzdV9yZXFfYWNrX2ksICAgICAgICAgLy8gRGF0YSBtZW1vcnkgcmVxdWVzdCBhY2tub3dsZWRnZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgZG1lbTJsc3VfcmRhdGFfaSwgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlYWQgZGF0YQorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgZG1lbTJsc3VfcmVzcF9pICAgICAgICAgICAgIC8vIERhdGEgbWVtb3J5IHJlc3BvbnNlCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9MU1VfRlNNX0lETEUsCisgICAgU0NSMV9MU1VfRlNNX0JVU1kKK30gdHlwZV9zY3IxX2xzdV9mc21fZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIExTVSBGU00gc2lnbmFscwordHlwZV9zY3IxX2xzdV9mc21fZSAgICAgICAgIGxzdV9mc21fY3VycjsgICAgICAgLy8gTFNVIEZTTSBjdXJyZW50IHN0YXRlCit0eXBlX3NjcjFfbHN1X2ZzbV9lICAgICAgICAgbHN1X2ZzbV9uZXh0OyAgICAgICAvLyBMU1UgRlNNIG5leHQgc3RhdGUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfZnNtX2lkbGU7ICAgICAgIC8vIExTVSBGU00gaXMgaW4gSURMRSBzdGF0ZQorCisvLyBMU1UgQ29tbWFuZCByZWdpc3RlciBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2NtZF91cGQ7ICAgICAgICAvLyBMU1UgQ29tbWFuZCByZWdpc3RlciB1cGRhdGUKK3R5cGVfc2NyMV9sc3VfY21kX3NlbF9lICAgICBsc3VfY21kX2ZmOyAgICAgICAgIC8vIExTVSBDb21tYW5kIHJlZ2lzdGVyIHZhbHVlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgbHN1X2NtZF9mZl9sb2FkOyAgICAvLyBSZWdpc3RlcmVkIExTVSBDb21tYW5kIGlzIGxvYWQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBsc3VfY21kX2ZmX3N0b3JlOyAgIC8vIFJlZ2lzdGVyZWQgTFNVIENvbW1hbmQgaXMgc3RvcmUKKworLy8gRE1FTSBjb21tYW5kIGFuZCB3aWR0aCBmbGFncworbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kX2xvYWQ7ICAgICAgLy8gRE1FTSBjb21tYW5kIGlzIGxvYWQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2NtZF9zdG9yZTsgICAgIC8vIERNRU0gQ29tbWFuZCBpcyBzdG9yZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2R0aF93b3JkOyAgICAgLy8gRE1FTSBkYXRhIHdpZHRoIGlzIFdPUkQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3dkdGhfaHdvcmQ7ICAgIC8vIERNRU0gZGF0YSB3aWR0aCBpcyBIQUxGV09SRAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fd2R0aF9ieXRlOyAgICAgLy8gRE1FTSBkYXRhIHdpZHRoIGlzIEJZVEUKKworLy8gRE1FTSByZXNwb25zZSBhbmQgcmVxdWVzdCBjb250cm9sIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3Bfb2s7ICAgICAgIC8vIERNRU0gcmVzcG9uc2UgaXMgT0sKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3Jlc3BfZXI7ICAgICAgIC8vIERNRU0gcmVzcG9uc2UgaXMgZXJyb25lb3VzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwX3JlY2VpdmVkOyAvLyBETUVNIHJlc3BvbnNlIGlzIHJlY2VpdmVkCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfdmQ7ICAgICAgICAvLyBETUVNIHJlcXVlc3QgaXMgdmFsaWQgKHJlcV9hY2sgcmVjZWl2ZWQpCisKKy8vIEV4Y2VwdGlvbnMgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9leGNfcmVxOyAgICAgICAgLy8gTFNVIGV4Y2VwdGlvbiByZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9hZGRyX21zbGduOyAgICAvLyBETUVNIGFkZHJlc3MgaXMgbWlzYWxpZ25lZAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fYWRkcl9tc2xnbl9sOyAgLy8gRE1FTSBsb2FkIGFkZHJlc3MgaXMgbWlzYWxpZ25lZAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fYWRkcl9tc2xnbl9zOyAgLy8gRE1FTSBzdG9yZSBhZGRyZXNzIGlzIG1pc2FsaWduZWQKK2BpZmRlZiBTQ1IxX1REVV9FTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxzdV9leGNfaHdicms7ICAgICAgLy8gTFNVIGhhcmR3YXJlIGJyZWFrcG9pbnQgZXhjZXB0aW9uCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRyb2wgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIERNRU0gcmVzcG9uc2UgYW5kIHJlcXVlc3QgY29udHJvbCBzaWduYWxzCithc3NpZ24gZG1lbV9yZXNwX29rICAgICAgID0gKGRtZW0ybHN1X3Jlc3BfaSA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSyk7Cithc3NpZ24gZG1lbV9yZXNwX2VyICAgICAgID0gKGRtZW0ybHN1X3Jlc3BfaSA9PSBTQ1IxX01FTV9SRVNQX1JEWV9FUik7Cithc3NpZ24gZG1lbV9yZXNwX3JlY2VpdmVkID0gZG1lbV9yZXNwX29rIHwgZG1lbV9yZXNwX2VyOworYXNzaWduIGRtZW1fcmVxX3ZkICAgICAgICA9IGV4dTJsc3VfcmVxX2kgJiBkbWVtMmxzdV9yZXFfYWNrX2kgJiB+bHN1X2V4Y19yZXE7CisKKy8vIExTVSBsb2FkIGFuZCBzdG9yZSBjb21tYW5kIGZsYWdzCithc3NpZ24gZG1lbV9jbWRfbG9hZCAgPSAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEIgKQorICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xCVSkKKyAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MSCApCisgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEhVKQorICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xXICk7Cithc3NpZ24gZG1lbV9jbWRfc3RvcmUgPSAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU0IgKQorICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NIICkKKyAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TVyApOworCisvLyBMU1UgZGF0YSB3aWR0aCBmbGFncworYXNzaWduIGRtZW1fd2R0aF93b3JkICA9IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MVyApCisgICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX1NXICk7Cithc3NpZ24gZG1lbV93ZHRoX2h3b3JkID0gKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xIICkKKyAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfTEhVKQorICAgICAgICAgICAgICAgICAgICAgICB8IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9TSCApOworYXNzaWduIGRtZW1fd2R0aF9ieXRlICA9IChleHUybHN1X2NtZF9pID09IFNDUjFfTFNVX0NNRF9MQiApCisgICAgICAgICAgICAgICAgICAgICAgIHwgKGV4dTJsc3VfY21kX2kgPT0gU0NSMV9MU1VfQ01EX0xCVSkKKyAgICAgICAgICAgICAgICAgICAgICAgfCAoZXh1MmxzdV9jbWRfaSA9PSBTQ1IxX0xTVV9DTURfU0IgKTsKKworLy8gTFNVIGNvbW1hbmQgcmVnaXN0ZXIKK2Fzc2lnbiBsc3VfY21kX3VwZCA9IGxzdV9mc21faWRsZSAmIGRtZW1fcmVxX3ZkOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBsc3VfY21kX2ZmIDw9IFNDUjFfTFNVX0NNRF9OT05FOworICAgIGVuZCBlbHNlIGlmIChsc3VfY21kX3VwZCkgYmVnaW4KKyAgICAgICAgbHN1X2NtZF9mZiA8PSBleHUybHN1X2NtZF9pOworICAgIGVuZAorZW5kCisKKy8vIExTVSByZWdpc3RlcmVkIGxvYWQgYW5kIHN0b3JlIGNvbW1hbmQgZmxhZ3MKK2Fzc2lnbiBsc3VfY21kX2ZmX2xvYWQgID0gKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX0xCICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX0xCVSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX0xIICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX0xIVSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGxzdV9jbWRfZmYgPT0gU0NSMV9MU1VfQ01EX0xXICk7Cithc3NpZ24gbHN1X2NtZF9mZl9zdG9yZSA9IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9TQiApCisgICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9TSCApCisgICAgICAgICAgICAgICAgICAgICAgICB8IChsc3VfY21kX2ZmID09IFNDUjFfTFNVX0NNRF9TVyApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTFNVIEZTTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIExTVSBGU00gaXMgdXNlZCB0byBjb250cm9sIHRoZSBMU1UgPC0+IERNRU0gaW50ZXJmYWNlCisgLy8KKy8vCisKKy8vIFVwZGF0aW5nIExTVSBGU00gc3RhdGUKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGxzdV9mc21fY3VyciA8PSBTQ1IxX0xTVV9GU01fSURMRTsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBsc3VfZnNtX2N1cnIgPD0gbHN1X2ZzbV9uZXh0OworICAgIGVuZAorZW5kCisKKy8vIExTVSBGU00gbmV4dCBzdGF0ZSBsb2dpYworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlIChsc3VfZnNtX2N1cnIpCisgICAgICAgIFNDUjFfTFNVX0ZTTV9JRExFOiBiZWdpbgorICAgICAgICAgICAgbHN1X2ZzbV9uZXh0ID0gZG1lbV9yZXFfdmQgICAgICAgID8gU0NSMV9MU1VfRlNNX0JVU1kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTFNVX0ZTTV9JRExFOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9MU1VfRlNNX0JVU1k6IGJlZ2luCisgICAgICAgICAgICBsc3VfZnNtX25leHQgPSBkbWVtX3Jlc3BfcmVjZWl2ZWQgPyBTQ1IxX0xTVV9GU01fSURMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9MU1VfRlNNX0JVU1k7CisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCithc3NpZ24gbHN1X2ZzbV9pZGxlID0gKGxzdV9mc21fY3VyciA9PSBTQ1IxX0xTVV9GU01fSURMRSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeGNlcHRpb25zIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gVGhlIGZvbGxvd2luZyB0eXBlcyBvZiBleGNlcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisgLy8gLSBMb2FkIGFkZHJlc3MgbWlzYWxpZ24KKyAvLyAtIExvYWQgYWNjZXNzIGZhdWx0CisgLy8gLSBTdG9yZSBhZGRyZXNzIG1pc2FsaWduCisgLy8gLSBTdG9yZSBhY2Nlc3MgZmF1bHQKKyAvLyAtIExTVSBicmVha3BvaW50IGV4Y2VwdGlvbgorLy8KKworLy8gRE1FTSBhZGRyIG1pc2FsaWduIGxvZ2ljCithc3NpZ24gZG1lbV9hZGRyX21zbGduICAgPSBleHUybHN1X3JlcV9pICYgKCAoZG1lbV93ZHRoX2h3b3JkICYgZXh1MmxzdV9hZGRyX2lbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoZG1lbV93ZHRoX3dvcmQgICYgfGV4dTJsc3VfYWRkcl9pWzE6MF0pKTsKK2Fzc2lnbiBkbWVtX2FkZHJfbXNsZ25fbCA9IGRtZW1fYWRkcl9tc2xnbiAmIGRtZW1fY21kX2xvYWQ7Cithc3NpZ24gZG1lbV9hZGRyX21zbGduX3MgPSBkbWVtX2FkZHJfbXNsZ24gJiBkbWVtX2NtZF9zdG9yZTsKKworLy8gRXhjZXB0aW9uIGNvZGUgbG9naWMKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgZG1lbV9yZXNwX2VyICAgICA6IGxzdTJleHVfZXhjX2NvZGVfbyA9IGxzdV9jbWRfZmZfbG9hZCAgPyBTQ1IxX0VYQ19DT0RFX0xEX0FDQ0VTU19GQVVMVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbHN1X2NtZF9mZl9zdG9yZSA/IFNDUjFfRVhDX0NPREVfU1RfQUNDRVNTX0ZBVUxUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9FWENfQ09ERV9JTlNUUl9NSVNBTElHTjsKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICBsc3VfZXhjX2h3YnJrICAgIDogbHN1MmV4dV9leGNfY29kZV9vID0gU0NSMV9FWENfQ09ERV9CUkVBS1BPSU5UOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisgICAgICAgIGRtZW1fYWRkcl9tc2xnbl9sOiBsc3UyZXh1X2V4Y19jb2RlX28gPSBTQ1IxX0VYQ19DT0RFX0xEX0FERFJfTUlTQUxJR047CisgICAgICAgIGRtZW1fYWRkcl9tc2xnbl9zOiBsc3UyZXh1X2V4Y19jb2RlX28gPSBTQ1IxX0VYQ19DT0RFX1NUX0FERFJfTUlTQUxJR047CisgICAgICAgIGRlZmF1bHQgICAgICAgICAgOiBsc3UyZXh1X2V4Y19jb2RlX28gPSBTQ1IxX0VYQ19DT0RFX0lOU1RSX01JU0FMSUdOOworICAgIGVuZGNhc2UgLy8gMSdiMQorZW5kCisKK2Fzc2lnbiBsc3VfZXhjX3JlcSA9IGRtZW1fYWRkcl9tc2xnbl9sIHwgZG1lbV9hZGRyX21zbGduX3MKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAgICAgICAgICAgIHwgbHN1X2V4Y19od2JyaworYGVuZGlmIC8vIFNDUjFfVERVX0VOCis7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMU1UgPC0+IEVYVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBsc3UyZXh1X3JkeV9vID0gZG1lbV9yZXNwX3JlY2VpdmVkOworYXNzaWduIGxzdTJleHVfZXhjX28gPSBkbWVtX3Jlc3BfZXIgfCBsc3VfZXhjX3JlcTsKKworLy8gU2lnbi0gb3IgemVyby1leHRlbmRpbmcgZGF0YSByZWNlaXZlZCBmcm9tIERNRU0KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY2FzZSAobHN1X2NtZF9mZikKKyAgICAgICAgU0NSMV9MU1VfQ01EX0xIIDogbHN1MmV4dV9sZGF0YV9vID0ge3sxNntkbWVtMmxzdV9yZGF0YV9pWzE1XX19LCBkbWVtMmxzdV9yZGF0YV9pWzE1OjBdfTsKKyAgICAgICAgU0NSMV9MU1VfQ01EX0xIVTogbHN1MmV4dV9sZGF0YV9vID0geyAxNidiMCwgICAgICAgICAgICAgICAgICAgICBkbWVtMmxzdV9yZGF0YV9pWzE1OjBdfTsKKyAgICAgICAgU0NSMV9MU1VfQ01EX0xCIDogbHN1MmV4dV9sZGF0YV9vID0ge3syNHtkbWVtMmxzdV9yZGF0YV9pWzddfX0sICBkbWVtMmxzdV9yZGF0YV9pWzc6MF19OworICAgICAgICBTQ1IxX0xTVV9DTURfTEJVOiBsc3UyZXh1X2xkYXRhX28gPSB7IDI0J2IwLCAgICAgICAgICAgICAgICAgICAgIGRtZW0ybHN1X3JkYXRhX2lbNzowXX07CisgICAgICAgIGRlZmF1bHQgICAgICAgICA6IGxzdTJleHVfbGRhdGFfbyA9IGRtZW0ybHN1X3JkYXRhX2k7CisgICAgZW5kY2FzZSAvLyBsc3VfY21kX2ZmCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExTVSA8LT4gRE1FTSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBsc3UyZG1lbV9yZXFfbyAgID0gZXh1MmxzdV9yZXFfaSAmIH5sc3VfZXhjX3JlcSAmIGxzdV9mc21faWRsZTsKK2Fzc2lnbiBsc3UyZG1lbV9hZGRyX28gID0gZXh1MmxzdV9hZGRyX2k7Cithc3NpZ24gbHN1MmRtZW1fd2RhdGFfbyA9IGV4dTJsc3Vfc2RhdGFfaTsKK2Fzc2lnbiBsc3UyZG1lbV9jbWRfbyAgID0gZG1lbV9jbWRfc3RvcmUgID8gU0NSMV9NRU1fQ01EX1dSIDogU0NSMV9NRU1fQ01EX1JEOworYXNzaWduIGxzdTJkbWVtX3dpZHRoX28gPSBkbWVtX3dkdGhfYnl0ZSAgPyBTQ1IxX01FTV9XSURUSF9CWVRFCisgICAgICAgICAgICAgICAgICAgICAgICA6IGRtZW1fd2R0aF9od29yZCA/IFNDUjFfTUVNX1dJRFRIX0hXT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1dJRFRIX1dPUkQ7CisKK2BpZmRlZiBTQ1IxX1REVV9FTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExTVSA8LT4gVERVIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGxzdTJ0ZHVfZG1vbl9vLnZkICAgID0gZXh1MmxzdV9yZXFfaSAmIGxzdV9mc21faWRsZSAmIH50ZHUybHN1X2licmtwdF9leGNfcmVxX2k7Cithc3NpZ24gbHN1MnRkdV9kbW9uX28uYWRkciAgPSBleHUybHN1X2FkZHJfaTsKK2Fzc2lnbiBsc3UydGR1X2Rtb25fby5sb2FkICA9IGRtZW1fY21kX2xvYWQ7Cithc3NpZ24gbHN1MnRkdV9kbW9uX28uc3RvcmUgPSBkbWVtX2NtZF9zdG9yZTsKKworYXNzaWduIGxzdV9leGNfaHdicmsgPSAoZXh1MmxzdV9yZXFfaSAmIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSkKKyAgICAgICAgICAgICAgICAgICAgIHwgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pOworCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQXNzZXJ0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gWCBjaGVja3MKKworU0NSMV9TVkFfTFNVX1hDSEVDS19DVFJMIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHtleHUybHN1X3JlcV9pLCBsc3VfZnNtX2N1cnIKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgICAgICAsIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfaSwgdGR1MmxzdV9kYnJrcHRfZXhjX3JlcV9pCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICB9KQorICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5rbm93biBjb250cm9sIHZhbHVlIik7CisKK1NDUjFfU1ZBX0xTVV9YQ0hFQ0tfQ01EIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGV4dTJsc3VfcmVxX2kgfC0+ICEkaXN1bmtub3duKHtleHUybHN1X2NtZF9pLCBleHUybHN1X2FkZHJfaX0pCisgICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgQ01EIG9yIGFkZHJlc3MiKTsKKworU0NSMV9TVkFfTFNVX1hDSEVDS19TREFUQSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAoZXh1MmxzdV9yZXFfaSAmIChsc3UyZG1lbV9jbWRfbyA9PSBTQ1IxX01FTV9DTURfV1IpKSB8LT4gISRpc3Vua25vd24oe2V4dTJsc3Vfc2RhdGFfaX0pCisgICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiB1bmRlZmluZWQgc3RvcmUgZGF0YSIpOworCitTQ1IxX1NWQV9MU1VfWENIRUNLX0VYQyA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBsc3UyZXh1X2V4Y19vIHwtPiAhJGlzdW5rbm93bihsc3UyZXh1X2V4Y19jb2RlX28pCisgICAgKSBlbHNlICRlcnJvcigiTFNVIEVycm9yOiBleGNlcHRpb24gY29kZSB1bmRlZmluZWQiKTsKKworU0NSMV9TVkFfTFNVX0lNRU1fQ1RSTCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBsc3UyZG1lbV9yZXFfbyB8LT4gISRpc3Vua25vd24oe2xzdTJkbWVtX2NtZF9vLCBsc3UyZG1lbV93aWR0aF9vLCBsc3UyZG1lbV9hZGRyX299KQorICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogdW5kZWZpbmVkIGRtZW0gY29udHJvbCIpOworCitTQ1IxX1NWQV9MU1VfSU1FTV9BQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgbHN1MmRtZW1fcmVxX28gfC0+ICEkaXN1bmtub3duKGRtZW0ybHN1X3JlcV9hY2tfaSkKKyAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVuZGVmaW5lZCBkbWVtIGFjayIpOworCitTQ1IxX1NWQV9MU1VfSU1FTV9XREFUQSA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBsc3UyZG1lbV9yZXFfbyAmIChsc3UyZG1lbV9jbWRfbyA9PSBTQ1IxX01FTV9DTURfV1IpCisgICAgfC0+ICEkaXN1bmtub3duKGxzdTJkbWVtX3dkYXRhX29bODowXSkKKyAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IHVuZGVmaW5lZCBkbWVtIHdkYXRhIik7CisKKy8vIEJlaGF2aW9yIGNoZWNrcworCitTQ1IxX1NWQV9MU1VfRVhDX09ORUhPVCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAkb25laG90MCh7ZG1lbV9yZXNwX2VyLCBkbWVtX2FkZHJfbXNsZ25fbCwgZG1lbV9hZGRyX21zbGduX3N9KQorICAgICkgZWxzZSAkZXJyb3IoIkxTVSBFcnJvcjogbW9yZSB0aGFuIG9uZSBleGNlcHRpb24gYXQgYSB0aW1lIik7CisKK1NDUjFfU1ZBX0xTVV9VTkVYUEVDVEVEX0RNRU1fUkVTUCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBsc3VfZnNtX2lkbGUgfC0+IH5kbWVtX3Jlc3BfcmVjZWl2ZWQKKyAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IG5vdCBleHBlY3RpbmcgbWVtb3J5IHJlc3BvbnNlIik7CisKK1NDUjFfU1ZBX0xTVV9SRVFfRVhDIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGxzdTJleHVfZXhjX28gfC0+IGV4dTJsc3VfcmVxX2kKKyAgICApIGVsc2UgJGVycm9yKCJMU1UgRXJyb3I6IGltcG9zc2libGUgZXhjZXB0aW9uIik7CisKK2BpZmRlZiBTQ1IxX1REVV9FTgorCitTQ1IxX0NPVl9MU1VfTUlTQUxJR05fQlJLUFQgOiBjb3ZlciBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAoZG1lbV9hZGRyX21zbGduX2wgfCBkbWVtX2FkZHJfbXNsZ25fcykgJiBsc3VfZXhjX2h3YnJrCispOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfbHN1CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9tcHJmLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjJhMzQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgpAQCAtMCwwICsxLDE2NyBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9waXBlX21wcmYuc3Y+CisvLy8gQGJyaWVmICAgICAgTXVsdGkgUG9ydCBSZWdpc3RlciBGaWxlIChNUFJGKQorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCisKK21vZHVsZSBzY3IxX3BpcGVfbXByZiAoCisgICAgLy8gQ29tbW9uCitgaWZkZWYgU0NSMV9NUFJGX1JTVF9FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sICAgICAgICAgICAgICAgICAgICAgIC8vIE1QUkYgcmVzZXQKK2BlbmRpZiAvLyBTQ1IxX01QUkZfUlNUX0VOCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVBSRiBjbG9jaworCisgICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMxX2FkZHJfaSwgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgYWRkcmVzcworICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMxX2RhdGFfbywgICAgICAgIC8vIE1QUkYgcnMxIHJlYWQgZGF0YQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcnMyX2FkZHJfaSwgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgYWRkcmVzcworICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgbXByZjJleHVfcnMyX2RhdGFfbywgICAgICAgIC8vIE1QUkYgcnMyIHJlYWQgZGF0YQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfd19yZXFfaSwgICAgICAgICAgIC8vIE1QUkYgd3JpdGUgcmVxdWVzdAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgZXh1Mm1wcmZfcmRfYWRkcl9pLCAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgYWRkcmVzcworICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgZXh1Mm1wcmZfcmRfZGF0YV9pICAgICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgZGF0YQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgd3JfcmVxX3ZkOworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9hZGRyX3ZkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczJfYWRkcl92ZDsKKworYGlmZGVmICBTQ1IxX01QUkZfUkFNCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJzMV9hZGRyX3ZkX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczJfYWRkcl92ZF9mZjsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczFfbmV3X2RhdGFfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczJfbmV3X2RhdGFfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczFfbmV3X2RhdGFfcmVxX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByczJfbmV3X2RhdGFfcmVxX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByZWFkX25ld19kYXRhX3JlcTsKKworbG9naWMgICAgW2BTQ1IxX1hMRU4tMTowXSAgICByZF9kYXRhX2ZmOworCitsb2dpYyAgICBbYFNDUjFfWExFTi0xOjBdICAgIHJzMV9kYXRhX2ZmOworbG9naWMgICAgW2BTQ1IxX1hMRU4tMTowXSAgICByczJfZGF0YV9mZjsKKworLy8gd2hlbiB1c2luZyBSQU0sIDIgbWVtb3JpZXMgYXJlIG5lZWRlZCBiZWNhdXNlIDMgc2ltdWx0YW5lb3VzIGluZGVwZW5kZW50CisvLyB3cml0ZS9yZWFkIG9wZXJhdGlvbnMgY2FuIG9jY3VyCisgYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwCisoKiByYW1zdHlsZSA9ICJNOUsiICopICAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50ICAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOworKCogcmFtc3R5bGUgPSAiTTlLIiAqKSAgICAgIGxvZ2ljICAgW2BTQ1IxX1hMRU4tMTowXSAgICBtcHJmX2ludDIgIFsxOmBTQ1IxX01QUkZfU0laRS0xXTsKKyBgZWxzaWYgU0NSMV9UUkdUX0ZQR0FfSU5URUxfQVJSSUFWCisoKiByYW1zdHlsZSA9ICJNMTBLIiAqKSAgICAgbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50ICAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOworKCogcmFtc3R5bGUgPSAiTTEwSyIgKikgICAgIGxvZ2ljICAgW2BTQ1IxX1hMRU4tMTowXSAgICBtcHJmX2ludDIgIFsxOmBTQ1IxX01QUkZfU0laRS0xXTsKKyBgZWxzZQorbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50ICAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOworbG9naWMgICBbYFNDUjFfWExFTi0xOjBdICAgIG1wcmZfaW50MiAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdOworIGBlbmRpZgorYGVsc2UgIC8vIGRpc3RyaWJ1dGVkIGxvZ2ljIGltcGxlbWVudGF0aW9uCit0eXBlX3NjcjFfbXByZl92IFsxOmBTQ1IxX01QUkZfU0laRS0xXSAgICAgICAgICAgICAgICAgIG1wcmZfaW50OworYGVuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNUFJGIGNvbnRyb2wgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIGNvbnRyb2wgc2lnbmFscyBjb21tb24gZm9yIGRpc3RyaWJ1dGVkIGxvZ2ljIGFuZCBSQU0gaW1wbGVtZW50YXRpb25zCithc3NpZ24gIHJzMV9hZGRyX3ZkICA9ICAgfGV4dTJtcHJmX3JzMV9hZGRyX2k7Cithc3NpZ24gIHJzMl9hZGRyX3ZkICA9ICAgfGV4dTJtcHJmX3JzMl9hZGRyX2k7CisKK2Fzc2lnbiAgd3JfcmVxX3ZkICA9ICAgZXh1Mm1wcmZfd19yZXFfaSAmIHxleHUybXByZl9yZF9hZGRyX2k7CisKKy8vIFJBTSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjb250cm9sIHNpZ25hbHMKK2BpZmRlZiBTQ1IxX01QUkZfUkFNCithc3NpZ24gIHJzMV9uZXdfZGF0YV9yZXEgICAgPSAgIHdyX3JlcV92ZCAmICggZXh1Mm1wcmZfcnMxX2FkZHJfaSA9PSBleHUybXByZl9yZF9hZGRyX2kgKTsKK2Fzc2lnbiAgcnMyX25ld19kYXRhX3JlcSAgICA9ICAgd3JfcmVxX3ZkICYgKCBleHUybXByZl9yczJfYWRkcl9pID09IGV4dTJtcHJmX3JkX2FkZHJfaSApOworYXNzaWduICByZWFkX25ld19kYXRhX3JlcSAgID0gICByczFfbmV3X2RhdGFfcmVxIHwgcnMyX25ld19kYXRhX3JlcTsKKworYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KKyAgICByczFfYWRkcl92ZF9mZiAgICAgICAgICA8PSAgcnMxX2FkZHJfdmQ7CisgICAgcnMyX2FkZHJfdmRfZmYgICAgICAgICAgPD0gIHJzMl9hZGRyX3ZkOworICAgIHJzMV9uZXdfZGF0YV9yZXFfZmYgICAgIDw9ICByczFfbmV3X2RhdGFfcmVxOworICAgIHJzMl9uZXdfZGF0YV9yZXFfZmYgICAgIDw9ICByczJfbmV3X2RhdGFfcmVxOworZW5kCitgZW5kaWYgLy8gU0NSMV9NUFJGX1JBTQorCitgaWZkZWYgIFNDUjFfTVBSRl9SQU0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUkFNIGltcGxlbWVudGF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUkFNIGlzIGltcGxlbWVudGVkIHdpdGggMiBzaW1wbGUgZHVhbC1wb3J0IG1lbW9yaWVzIHdpdGggc3luYyByZWFkIG9wZXJhdGlvbjsKKy8vIGxvZ2ljIGZvciAid3JpdGUtZmlyc3QiIFJEVyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBleHRlcm5hbGx5IHRvIHRoZSBlbWJlZGRlZAorLy8gbWVtb3J5IGJsb2NrcworCisvLyBieXBhc3MgbmV3IHdyX2RhdGEgdG8gdGhlIHJlYWQgb3V0cHV0IGlmIHdyaXRlL3JlYWQgY29sbGlzaW9uIG9jY3VycworYXNzaWduICBtcHJmMmV4dV9yczFfZGF0YV9vICAgPSAgICggcnMxX25ld19kYXRhX3JlcV9mZiApID8gcmRfZGF0YV9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoIHJzMV9hZGRyX3ZkX2ZmICkgICA/IHJzMV9kYXRhX2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzAgKTsKKworYXNzaWduICBtcHJmMmV4dV9yczJfZGF0YV9vICAgPSAgICggcnMyX25ld19kYXRhX3JlcV9mZiApID8gcmRfZGF0YV9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoIHJzMl9hZGRyX3ZkX2ZmICkgICA/IHJzMl9kYXRhX2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzAgKTsKKworYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KKyAgICBpZiAoIHJlYWRfbmV3X2RhdGFfcmVxICkgYmVnaW4KKyAgICAgICAgcmRfZGF0YV9mZiAgICAgPD0gIGV4dTJtcHJmX3JkX2RhdGFfaTsKKyAgICBlbmQKK2VuZAorCisvLyBzeW5jaHJvbm91cyByZWFkIG9wZXJhdGlvbgorYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KKyAgICByczFfZGF0YV9mZiAgIDw9ICAgbXByZl9pbnRbZXh1Mm1wcmZfcnMxX2FkZHJfaV07CisgICAgcnMyX2RhdGFfZmYgICA8PSAgIG1wcmZfaW50MltleHUybXByZl9yczJfYWRkcl9pXTsKK2VuZAorCisvLyB3cml0ZSBvcGVyYXRpb24KK2Fsd2F5c19mZiBAKCBwb3NlZGdlIGNsayApIGJlZ2luCisgICAgaWYgKCB3cl9yZXFfdmQgKSBiZWdpbgorICAgICAgICBtcHJmX2ludFtleHUybXByZl9yZF9hZGRyX2ldICA8PSBleHUybXByZl9yZF9kYXRhX2k7CisgICAgICAgIG1wcmZfaW50MltleHUybXByZl9yZF9hZGRyX2ldIDw9IGV4dTJtcHJmX3JkX2RhdGFfaTsKKyAgICBlbmQKK2VuZAorYGVsc2UgICAvLyBkaXN0cmlidXRlZCBsb2dpYyBpbXBsZW1lbnRhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGRpc3RyaWJ1dGVkIGxvZ2ljIGltcGxlbWVudGF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBhc3luY2hyb25vdXMgcmVhZCBvcGVyYXRpb24KK2Fzc2lnbiAgbXByZjJleHVfcnMxX2RhdGFfbyA9ICggcnMxX2FkZHJfdmQgKSA/IG1wcmZfaW50W2V4dTJtcHJmX3JzMV9hZGRyX2ldIDogJzA7Cithc3NpZ24gIG1wcmYyZXh1X3JzMl9kYXRhX28gPSAoIHJzMl9hZGRyX3ZkICkgPyBtcHJmX2ludFtleHUybXByZl9yczJfYWRkcl9pXSA6ICcwOworCisvLyB3cml0ZSBvcGVyYXRpb24KKyBgaWZkZWYgU0NSMV9NUFJGX1JTVF9FTgorYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uICkgYmVnaW4KKyAgICBpZiAoIH5yc3RfbiApIGJlZ2luCisgICAgICAgIG1wcmZfaW50IDw9ICd7ZGVmYXVsdDogJzB9OworICAgIGVuZCBlbHNlIGlmICggd3JfcmVxX3ZkICkgYmVnaW4KKyAgICAgICAgbXByZl9pbnRbZXh1Mm1wcmZfcmRfYWRkcl9pXSA8PSBleHUybXByZl9yZF9kYXRhX2k7CisgICAgZW5kCitlbmQKKyBgZWxzZSAvLyB+U0NSMV9NUFJGX1JTVF9FTgorYWx3YXlzX2ZmIEAoIHBvc2VkZ2UgY2xrICkgYmVnaW4KKyAgICBpZiAoIHdyX3JlcV92ZCApIGJlZ2luCisgICAgICAgIG1wcmZfaW50W2V4dTJtcHJmX3JkX2FkZHJfaV0gPD0gZXh1Mm1wcmZfcmRfZGF0YV9pOworICAgIGVuZAorZW5kCisgYGVuZGlmIC8vIH5TQ1IxX01QUkZfUlNUX0VOCitgZW5kaWYKKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgaWZkZWYgU0NSMV9NUFJGX1JTVF9FTgorU0NSMV9TVkFfTVBSRl9XUklURVggOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgZXh1Mm1wcmZfd19yZXFfaSB8LT4gISRpc3Vua25vd24oe2V4dTJtcHJmX3JkX2FkZHJfaSwgKHxleHUybXByZl9yZF9hZGRyX2kgPyBleHUybXByZl9yZF9kYXRhX2kgOiBgU0NSMV9YTEVOJ2QwKX0pCisgICAgKSBlbHNlICRlcnJvcigiTVBSRiBlcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKK2BlbmRpZiAvLyBTQ1IxX01QUkZfUlNUX0VOCisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX3BpcGVfbXByZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RkdS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90ZHUuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxZjZhNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90ZHUuc3YKQEAgLTAsMCArMSw2MTAgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV90ZHUuc3Y+CisvLy8gQGJyaWVmICAgICAgVHJpZ2dlciBEZWJ1ZyBVbml0IChURFUpCisvLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLworIC8vIEZ1bmN0aW9uYWxpdHk6CisgLy8gLSBQcm92aWRlcyByZWFkL3dyaXRlIGludGVyZmFjZSBmb3IgVERVIENTUnMKKyAvLyAtIFByb3ZpZGVzIHRyaWdnZXJzIGZ1bmN0aW9uYWxpdHk6CisgLy8gICAtIFN1cHBvcnRzIHRyaWdnZXJzIGVpdGhlciBpbiBib3RoIERlYnVnIGFuZCBNIG1vZGVzIG9yIGluIERlYnVnIG1vZGUgb25seQorIC8vICAgLSBTdXBwb3J0cyB2aXJ0dWFsIGFkZHJlc3MgbWF0Y2hpbmcgKGxvYWQsIHN0b3JlLCBleGVjKSB0cmlnZ2VycworIC8vICAgLSBTdXBwb3J0cyBpbnN0cnVjdGlvbiBjb3VudCB0cmlnZ2VycworIC8vICAgLSBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb24gdHJpZ2dlciBmaXJpbmc6CisgLy8gICAgIC0gQnJlYWtwb2ludCBleGNlcHRpb24gcmFpc2luZworIC8vICAgICAtIERlYnVnIE1vZGUgZW50ZXJpbmcKKyAvLyAgIC0gU3VwcG9ydHMgdHJpZ2dlcnMgY2hhaW5pbmcKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIENTUiByZWFkL3dyaXRlIGkvZgorIC8vIC0gVERVIENTUnM6CisgLy8gICAtIFRTRUxFQ1QKKyAvLyAgIC0gVERBVEExL01DT05UUk9ML0lDT1VOVAorIC8vICAgLSBUREFUQTIKKyAvLyAgIC0gVElORk8KKyAvLyAtIFREVSA8LT4gRVhVIGkvZgorIC8vIC0gVERVIDwtPiBMU1UgaS9mCisgLy8gLSBURFUgPC0+IEhEVSBpL2YKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9URFVfRU4KK2BpbmNsdWRlICJzY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmgiCitgaW5jbHVkZSAic2NyMV90ZHUuc3ZoIgorCittb2R1bGUgc2NyMV9waXBlX3RkdSAoCisgICAgLy8gQ29tbW9uIHNpZ25hbHMKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgcmVzZXQKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbiwgICAgICAgICAgICAgICAgICAgICAvLyBURFUgY2xvY2sgZW5hYmxlCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHVfZHNibF9pLCAgICAgICAgICAgICAgICAgLy8gVERVIERpc2FibGUKKworICAgIC8vIFREVSA8LT4gQ1NSIGludGVyZmFjZQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9yZXFfaSwgICAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHJlcXVlc3QKKyAgICBpbnB1dCAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfY21kX2ksICAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiBjb21tYW5kCisgICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgICAgICAgICAgICBjc3IydGR1X2FkZHJfaSwgICAgICAgICAgICAgLy8gQ1NSLVREVSBpL2YgYWRkcmVzcworICAgIGlucHV0ICBsb2dpYyBbU0NSMV9URFVfREFUQV9XLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV93ZGF0YV9pLCAgICAgICAgICAgIC8vIENTUi1URFUgaS9mIHdyaXRlIGRhdGEKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0RBVEFfVy0xOjBdICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbywgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZWFkIGRhdGEKKyAgICBvdXRwdXQgdHlwZV9zY3IxX2Nzcl9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmVzcF9vLCAgICAgICAgICAgICAvLyBDU1ItVERVIGkvZiByZXNwb25zZQorCisgICAgLy8gVERVIDwtPiBFWFUgaW50ZXJmYWNlCisgICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zICAgICAgICAgICAgICAgICAgICAgICBleHUydGR1X2ltb25faSwgICAgICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc3RyZWFtIG1vbml0b3JpbmcKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX0FMTFRSSUdfTlVNLTEgOiAwXSAgICAgICAgICAgICAgIHRkdTJleHVfaWJya3B0X21hdGNoX28sICAgICAvLyBJbnN0cnVjdGlvbiBCUCBtYXRjaAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vLCAgIC8vIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0CisgICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICBleHUydGR1X2JwX3JldGlyZV9pLCAgICAgICAgLy8gTWFwIG9mIEJQcyBiZWluZyByZXRpcmVkCisKKyAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKK2BpZm5kZWYgU0NSMV9URFVfRU4KKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfYnJrX2VuX28sICAgICAgICAgICAvLyBURFUtTFNVIEJyZWFrcG9pbnQgZW5hYmxlCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfaWJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIEluc3RydWN0aW9uIEJQIGV4Y2VwdGlvbiByZXF1ZXN0CisgICAgaW5wdXQgIHR5cGVfc2NyMV9icmttX2xzdV9tb25fcyAgICAgICAgICAgICAgICAgICAgICAgICBsc3UydGR1X2Rtb25faSwgICAgICAgICAgICAgLy8gVERVLUxTVSBEYXRhIGFkZHJlc3Mgc3RyZWFtIG1vbml0b3JpbmcKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfVERVX01UUklHX05VTS0xIDogMF0gICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X21hdGNoX28sICAgICAvLyBURFUtTFNVIERhdGEgQlAgbWF0Y2gKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfbywgICAvLyBURFUtTFNVIERhdGEgQlAgZXhjZXB0aW9uIHJlcXVlc3QKKworICAgIC8vIFREVSA8LT4gSERVIGludGVyZmFjZQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmhkdV9kbW9kZV9yZXFfbyAgICAgICAgIC8vIERlYnVnIE1vZGUgcmVkaXJlY3Rpb24gcmVxdWVzdAorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIE1UUklHX05VTSAgID0gU0NSMV9URFVfTVRSSUdfTlVNOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgQUxMVFJJR19OVU0gPSBTQ1IxX1REVV9BTExUUklHX05VTTsKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIEFMTFRSSUdfVyAgID0gJGNsb2cyKEFMTFRSSUdfTlVNKzEpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVERVIENTUnMgcmVhZC93cml0ZSBpL2Ygc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gV3JpdGUgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX3dyX3JlcTsKK2xvZ2ljIFtTQ1IxX1REVV9EQVRBX1ctMTowXSAgICAgICAgICAgICAgICAgICAgIGNzcl93cl9kYXRhOworCisvLyBSZWdpc3RlciBzZWxlY3QKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RzZWxlY3Q7Citsb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9tY29udHJvbDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RkYXRhMjsKK2BpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX2ljb3VudDsKK2BlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KKworLy8gVERVIENTUnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRTRUxFQ1QgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X3VwZDsKK2xvZ2ljIFtBTExUUklHX1ctMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90c2VsZWN0X2ZmOworCisvLyBNQ09OVFJPTCByZWdpc3RlcgorbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX3dyX3JlcTsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9jbGtfZW47Citsb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfdXBkOworCitsb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfZmY7Citsb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9tX2ZmOworbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX21fbmV4dDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmOworbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sb2FkX2ZmOworbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2xvYWRfbmV4dDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZjsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9uZXh0OworbG9naWMgW01UUklHX05VTS0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX21jb250cm9sX2FjdGlvbl9mZjsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9oaXRfZmY7Citsb2dpYyBbTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQ7CisKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2hpdDsKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9tY29udHJvbF9sZHN0X2hpdDsKKworLy8gSUNPVU5UIHJlZ2lzdGVyCitgaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY2xrX2VuOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF91cGQ7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfZG1vZGVfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X21fbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfYWN0aW9uX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0X2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyX2ljb3VudF9oaXRfbmV4dDsKK2xvZ2ljIFtTQ1IxX1REVV9JQ09VTlRfQ09VTlRfSEktU0NSMV9URFVfSUNPVU5UX0NPVU5UX0xPOjBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmOworbG9naWMgW1NDUjFfVERVX0lDT1VOVF9DT1VOVF9ISS1TQ1IxX1REVV9JQ09VTlRfQ09VTlRfTE86MF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfY291bnRfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfc2tpcF9uZXh0OworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2RlY3JfZW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X2NvdW50X2RlY3I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3JfaWNvdW50X3NraXBfZHNibDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9pY291bnRfaGl0OworYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgorCisvLyBUREFUQTIgcmVnaXN0ZXIKK2xvZ2ljIFtNVFJJR19OVU0tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcl90ZGF0YTJfdXBkOworbG9naWMgW01UUklHX05VTS0xOjBdIFtTQ1IxX1REVV9EQVRBX1ctMTowXSAgICAgY3NyX3RkYXRhMl9mZjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENTUiByZWFkL3dyaXRlIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVhZCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHRkdTJjc3JfcmVzcF9vID0gY3NyMnRkdV9yZXFfaSA/IFNDUjFfQ1NSX1JFU1BfT0sgOiBTQ1IxX0NTUl9SRVNQX0VSOworCithbHdheXNfY29tYiBiZWdpbgorICAgIHRkdTJjc3JfcmRhdGFfbyA9ICcwOworICAgIGlmIChjc3IydGR1X3JlcV9pKSBiZWdpbgorICAgICAgICBjYXNlIChjc3IydGR1X2FkZHJfaSkKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVDogYmVnaW4KKyAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX28gPSB7JzAsIGNzcl90c2VsZWN0X2ZmfTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGZvcihpbnQgdW5zaWduZWQgaSA9IDA7IGkgPCBNVFJJR19OVU07ICsraSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhpKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfbyA9IGNzcl90ZGF0YTJfZmZbaV07CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMSA6IGJlZ2luCisgICAgICAgICAgICAgICAgZm9yKGludCB1bnNpZ25lZCBpID0gMDsgaSA8IE1UUklHX05VTTsgKytpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX1REQVRBMV9UWVBFX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfVERBVEExX1RZUEVfTE9dICAgICAgPSBTQ1IxX1REVV9NQ09OVFJPTF9UWVBFX1ZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9UREFUQTFfRE1PREVdICAgICAgID0gY3NyX21jb250cm9sX2Rtb2RlX2ZmW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX01BU0tNQVhfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX0xPXSA9IFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX0hJVF0gICAgICAgPSBjc3JfbWNvbnRyb2xfaGl0X2ZmW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1NFTEVDVF0gICAgPSBTQ1IxX1REVV9NQ09OVFJPTF9TRUxFQ1RfVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1RJTUlOR10gICAgPSBTQ1IxX1REVV9NQ09OVFJPTF9USU1JTkdfVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX0FDVElPTl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX0FDVElPTl9MT10gID0gezUnYjAsIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbaV19OworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX0NIQUlOXSAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX01BVENIX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfTUNPTlRST0xfTUFUQ0hfTE9dICAgPSA0J2IwOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX01dICAgICAgICAgPSBjc3JfbWNvbnRyb2xfbV9mZltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREFdID0gU0NSMV9URFVfTUNPTlRST0xfUkVTRVJWRURBX1ZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9TXSAgICAgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9VXSAgICAgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9FWEVDVVRFXSAgID0gY3NyX21jb250cm9sX2V4ZWNfZmYgW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX01DT05UUk9MX1NUT1JFXSAgICAgPSBjc3JfbWNvbnRyb2xfc3RvcmVfZmZbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfTUNPTlRST0xfTE9BRF0gICAgICA9IGNzcl9tY29udHJvbF9sb2FkX2ZmIFtpXTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCitgaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCisgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhTQ1IxX1REVV9BTExUUklHX05VTSAtIDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhX29bU0NSMV9URFVfVERBVEExX1RZUEVfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX1REQVRBMV9UWVBFX0xPXSAgICA9IFNDUjFfVERVX0lDT1VOVF9UWVBFX1ZBTDsKKyAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX1REQVRBMV9ETU9ERV0gICAgID0gY3NyX2ljb3VudF9kbW9kZV9mZjsKKyAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9ISVRdICAgICAgID0gY3NyX2ljb3VudF9oaXRfZmY7CisgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9JQ09VTlRfQ09VTlRfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX0lDT1VOVF9DT1VOVF9MT10gICA9IGNzcl9pY291bnRfY291bnRfZmY7CisgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9JQ09VTlRfVV0gICAgICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9JQ09VTlRfU10gICAgICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9JQ09VTlRfTV0gICAgICAgICA9IGNzcl9pY291bnRfbV9mZjsKKyAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZGF0YV9vW1NDUjFfVERVX0lDT1VOVF9BQ1RJT05fSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX0lDT1VOVF9BQ1RJT05fTE9dICA9IHs1J2IwLCBjc3JfaWNvdW50X2FjdGlvbl9mZn07CisgICAgICAgICAgICAgICAgZW5kCitgZW5kaWYgLy8gU0NSMV9URFVfSUNPVU5UX0VOCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVElORk8gOiBiZWdpbgorICAgICAgICAgICAgICAgIGZvcihpbnQgdW5zaWduZWQgaSA9IDA7IGkgPCBNVFJJR19OVU07ICsraSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhpKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9NQ09OVFJPTF9UWVBFX1ZBTF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKK2BpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KKyAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKFNDUjFfVERVX0FMTFRSSUdfTlVNIC0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHRkdTJjc3JfcmRhdGFfb1tTQ1IxX1REVV9JQ09VTlRfVFlQRV9WQUxdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbmQKK2BlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vIFdyaXRlIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNzcl93cl9yZXEgID0gMSdiMDsKKyAgICBjc3Jfd3JfZGF0YSA9ICcwOworCisgICAgY2FzZSAoY3NyMnRkdV9jbWRfaSkKKyAgICAgICAgU0NSMV9DU1JfQ01EX1dSSVRFOiBiZWdpbgorICAgICAgICAgICAgY3NyX3dyX3JlcSAgPSAxJ2IxOworICAgICAgICAgICAgY3NyX3dyX2RhdGEgPSBjc3IydGR1X3dkYXRhX2k7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0NTUl9DTURfU0VUICA6IGJlZ2luCisgICAgICAgICAgICBjc3Jfd3JfcmVxICA9IHxjc3IydGR1X3dkYXRhX2k7CisgICAgICAgICAgICBjc3Jfd3JfZGF0YSA9IHRkdTJjc3JfcmRhdGFfbyB8IGNzcjJ0ZHVfd2RhdGFfaTsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfQ1NSX0NNRF9DTEVBUjogYmVnaW4KKyAgICAgICAgICAgIGNzcl93cl9yZXEgID0gfGNzcjJ0ZHVfd2RhdGFfaTsKKyAgICAgICAgICAgIGNzcl93cl9kYXRhID0gdGR1MmNzcl9yZGF0YV9vICYgfmNzcjJ0ZHVfd2RhdGFfaTsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8gUmVnaXN0ZXIgc2VsZWN0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNzcl9hZGRyX3RzZWxlY3QgID0gMSdiMDsKKyAgICBjc3JfYWRkcl90ZGF0YTIgICA9ICcwOworICAgIGNzcl9hZGRyX21jb250cm9sID0gJzA7CitgaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCisgICAgY3NyX2FkZHJfaWNvdW50ICAgPSAnMDsKK2BlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KKworICAgIGlmIChjc3IydGR1X3JlcV9pKSBiZWdpbgorICAgICAgICBjYXNlIChjc3IydGR1X2FkZHJfaSkKKyAgICAgICAgICAgIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVFNFTEVDVDogYmVnaW4KKyAgICAgICAgICAgICAgICBjc3JfYWRkcl90c2VsZWN0ID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTEgOiBiZWdpbgorICAgICAgICAgICAgICAgIGZvcihpbnQgdW5zaWduZWQgaSA9IDA7IGkgPCBNVFJJR19OVU07ICsraSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhpKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX21jb250cm9sW2ldID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCitgaWZkZWYgU0NSMV9URFVfSUNPVU5UX0VOCisgICAgICAgICAgICAgICAgaWYoY3NyX3RzZWxlY3RfZmYgPT0gQUxMVFJJR19XJyhTQ1IxX1REVV9BTExUUklHX05VTSAtIDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjc3JfYWRkcl9pY291bnQgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1REQVRBMiA6IGJlZ2luCisgICAgICAgICAgICAgICAgZm9yKGludCB1bnNpZ25lZCBpID0gMDsgaSA8IE1UUklHX05VTTsgKytpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZihjc3JfdHNlbGVjdF9mZiA9PSBBTExUUklHX1cnKGkpICkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9hZGRyX3RkYXRhMltpXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFREVSBDU1JzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBURFUgQ1NScyBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzOgorIC8vIC0gVFNFTEVDVAorIC8vIC0gVERBVEExL01DT05UUk9ML0lDT1VOVCAoZGVwZW5kaW5nIG9uIHRoZSB0eXBlIGZpZWxkIHZhbHVlKQorIC8vIC0gVERBVEEyCisvLworCisvLyBUU0VMRUNUIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGV0ZXJtaW5lcyB3aGljaCB0cmlnZ2VyIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgb3RoZXIgdHJpZ2dlciByZWdpc3RlcnMKKworYXNzaWduIGNzcl90c2VsZWN0X3VwZCA9IGNsa19lbiAmIGNzcl9hZGRyX3RzZWxlY3QgJiBjc3Jfd3JfcmVxCisgICAgICAgICAgICAgICAgICAgICAgICYgKGNzcl93cl9kYXRhW0FMTFRSSUdfVy0xOjBdIDwgQUxMVFJJR19XJyhBTExUUklHX05VTSkpOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZih+cnN0X24pIGJlZ2luCisgICAgICAgIGNzcl90c2VsZWN0X2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmKGNzcl90c2VsZWN0X3VwZCkgYmVnaW4KKyAgICAgICAgY3NyX3RzZWxlY3RfZmYgPD0gY3NyX3dyX2RhdGFbQUxMVFJJR19XLTE6MF07CisgICAgZW5kCitlbmQKKworYGlmZGVmIFNDUjFfVERVX0lDT1VOVF9FTgorLy8gSUNPVU5UIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHJvdmlkZXMgYSB0cmlnZ2VyIHRoYXQgZmlyZXMgd2hlbiB0aGUgY2VydGFpbiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGhhcyByZXRpcmVkCisvLyBJcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgc2luZ2xlIHN0ZXAgdHJpZ2dlciAoaW4gdGhpcyBjYXNlIGNvdW50IG11c3QgYmUgMSkKKworYXNzaWduIGNzcl9pY291bnRfd3JfcmVxID0gY3NyX2FkZHJfaWNvdW50ICYgY3NyX3dyX3JlcTsKK2Fzc2lnbiBjc3JfaWNvdW50X2Nsa19lbiA9IGNsa19lbiAmIChjc3JfaWNvdW50X3dyX3JlcSB8IGNzcl9pY291bnRfbV9mZik7Cithc3NpZ24gY3NyX2ljb3VudF91cGQgICAgPSB+Y3NyX2ljb3VudF9kbW9kZV9mZgorICAgICAgICAgICAgICAgICAgICAgICAgID8gY3NyX2ljb3VudF93cl9yZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X3dyX3JlcTsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYofnJzdF9uKSBiZWdpbgorICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX2ZmICA8PSAxJ2IwOworICAgICAgICBjc3JfaWNvdW50X21fZmYgICAgICA8PSAxJ2IwOworICAgICAgICBjc3JfaWNvdW50X2FjdGlvbl9mZiA8PSAxJ2IwOworICAgICAgICBjc3JfaWNvdW50X2hpdF9mZiAgICA8PSAxJ2IwOworICAgICAgICBjc3JfaWNvdW50X2NvdW50X2ZmICA8PSAnMDsKKyAgICAgICAgY3NyX2ljb3VudF9za2lwX2ZmICAgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBpZiAoY3NyX2ljb3VudF9jbGtfZW4pIGJlZ2luCisgICAgICAgIGNzcl9pY291bnRfZG1vZGVfZmYgIDw9IGNzcl9pY291bnRfZG1vZGVfbmV4dDsKKyAgICAgICAgY3NyX2ljb3VudF9tX2ZmICAgICAgPD0gY3NyX2ljb3VudF9tX25leHQ7CisgICAgICAgIGNzcl9pY291bnRfYWN0aW9uX2ZmIDw9IGNzcl9pY291bnRfYWN0aW9uX25leHQ7CisgICAgICAgIGNzcl9pY291bnRfaGl0X2ZmICAgIDw9IGNzcl9pY291bnRfaGl0X25leHQ7CisgICAgICAgIGNzcl9pY291bnRfY291bnRfZmYgIDw9IGNzcl9pY291bnRfY291bnRfbmV4dDsKKyAgICAgICAgY3NyX2ljb3VudF9za2lwX2ZmICAgPD0gY3NyX2ljb3VudF9za2lwX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIGNzcl9pY291bnRfZGVjcl9lbiAgICA9ICh+dGR1X2RzYmxfaSAmIGNzcl9pY291bnRfbV9mZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBleHUydGR1X2ltb25faS52ZCAmIChjc3JfaWNvdW50X2NvdW50X2ZmICE9IDE0J2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7Cithc3NpZ24gY3NyX2ljb3VudF9jb3VudF9kZWNyID0gZXh1MnRkdV9pbW9uX2kucmVxICYgY3NyX2ljb3VudF9kZWNyX2VuICYgfmNzcl9pY291bnRfc2tpcF9mZjsKK2Fzc2lnbiBjc3JfaWNvdW50X3NraXBfZHNibCAgPSBleHUydGR1X2ltb25faS5yZXEgJiBjc3JfaWNvdW50X2RlY3JfZW4gJiBjc3JfaWNvdW50X3NraXBfZmY7CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKGNzcl9pY291bnRfdXBkKSBiZWdpbgorICAgICAgICBjc3JfaWNvdW50X2Rtb2RlX25leHQgID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfVERBVEExX0RNT0RFXTsKKyAgICAgICAgY3NyX2ljb3VudF9tX25leHQgICAgICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9NXTsKKyAgICAgICAgY3NyX2ljb3VudF9hY3Rpb25fbmV4dCA9IChjc3Jfd3JfZGF0YVtTQ1IxX1REVV9JQ09VTlRfQUNUSU9OX0hJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6U0NSMV9URFVfSUNPVU5UX0FDVElPTl9MT10gPT0gJ2IxKTsKKyAgICAgICAgY3NyX2ljb3VudF9oaXRfbmV4dCAgICA9IGNzcl93cl9kYXRhW1NDUjFfVERVX0lDT1VOVF9ISVRdOworICAgICAgICBjc3JfaWNvdW50X2NvdW50X25leHQgID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfSUNPVU5UX0NPVU5UX0hJOlNDUjFfVERVX0lDT1VOVF9DT1VOVF9MT107CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY3NyX2ljb3VudF9kbW9kZV9uZXh0ICA9IGNzcl9pY291bnRfZG1vZGVfZmY7CisgICAgICAgIGNzcl9pY291bnRfbV9uZXh0ICAgICAgPSBjc3JfaWNvdW50X21fZmY7CisgICAgICAgIGNzcl9pY291bnRfYWN0aW9uX25leHQgPSBjc3JfaWNvdW50X2FjdGlvbl9mZjsKKyAgICAgICAgY3NyX2ljb3VudF9oaXRfbmV4dCAgICA9IGV4dTJ0ZHVfYnBfcmV0aXJlX2lbQUxMVFJJR19OVU0gLSAxJ2IxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9oaXRfZmY7CisgICAgICAgIGNzcl9pY291bnRfY291bnRfbmV4dCAgPSBjc3JfaWNvdW50X2NvdW50X2RlY3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9pY291bnRfY291bnRfZmYgLSAxJ2IxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfaWNvdW50X2NvdW50X2ZmOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBjc3JfaWNvdW50X3NraXBfbmV4dCA9IGNzcl9pY291bnRfd3JfcmVxICAgID8gY3NyX3dyX2RhdGFbU0NSMV9URFVfSUNPVU5UX01dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjc3JfaWNvdW50X3NraXBfZHNibCA/IDEnYjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX2ljb3VudF9za2lwX2ZmOworYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgorCisvLyBNQ09OVFJPTCByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm92aWRlcyBhIHRyaWdnZXIgdGhhdCBmaXJlcyBvbiB0aGUgdmlydHVhbCBhZGRyZXNzIChzdG9yZWQgaW4gVERBVEEyKSBtYXRjaAorLy8gKGxvYWQsIHN0b3JlLCBleGVjIG9wdGlvbnMgc3VwcG9ydGVkKS4gVHJpZ2dlcnMgY2hhaW5pbmcgc3VwcG9ydGVkCisKK2dlbnZhciB0cmlnOworZ2VuZXJhdGUKK2ZvciAodHJpZyA9IDA7ICR1bnNpZ25lZCh0cmlnKSA8IE1UUklHX05VTTsgKyt0cmlnKSBiZWdpbiA6IGdibG9ja19tdHJpZworCithc3NpZ24gY3NyX21jb250cm9sX3dyX3JlcVt0cmlnXSA9IGNzcl9hZGRyX21jb250cm9sW3RyaWddICYgY3NyX3dyX3JlcTsKK2Fzc2lnbiBjc3JfbWNvbnRyb2xfY2xrX2VuW3RyaWddID0gY2xrX2VuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChjc3JfbWNvbnRyb2xfd3JfcmVxW3RyaWddIHwgY3NyX21jb250cm9sX21fZmZbdHJpZ10pOworYXNzaWduIGNzcl9tY29udHJvbF91cGQgICBbdHJpZ10gPSB+Y3NyX21jb250cm9sX2Rtb2RlX2ZmW3RyaWddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGR1X2RzYmxfaSAmIGNzcl9tY29udHJvbF93cl9yZXFbdHJpZ107CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmKH5yc3RfbikgYmVnaW4KKyAgICAgICAgY3NyX21jb250cm9sX2Rtb2RlX2ZmIFt0cmlnXSA8PSAxJ2IwOworICAgICAgICBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddIDw9IDEnYjA7CisgICAgICAgIGNzcl9tY29udHJvbF9leGVjX2ZmICBbdHJpZ10gPD0gMSdiMDsKKyAgICAgICAgY3NyX21jb250cm9sX2xvYWRfZmYgIFt0cmlnXSA8PSAxJ2IwOworICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddIDw9IDEnYjA7CisgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gMSdiMDsKKyAgICAgICAgY3NyX21jb250cm9sX2hpdF9mZiAgIFt0cmlnXSA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGlmKGNzcl9tY29udHJvbF9jbGtfZW5bdHJpZ10pIGJlZ2luCisgICAgICAgIGNzcl9tY29udHJvbF9kbW9kZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX2Rtb2RlX25leHRbdHJpZ107CisgICAgICAgIGNzcl9tY29udHJvbF9tX2ZmICAgICBbdHJpZ10gPD0gY3NyX21jb250cm9sX21fbmV4dFt0cmlnXTsKKyAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfZmYgIFt0cmlnXSA8PSBjc3JfbWNvbnRyb2xfZXhlY19uZXh0W3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9sb2FkX25leHRbdHJpZ107CisgICAgICAgIGNzcl9tY29udHJvbF9zdG9yZV9mZiBbdHJpZ10gPD0gY3NyX21jb250cm9sX3N0b3JlX25leHRbdHJpZ107CisgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fZmZbdHJpZ10gPD0gY3NyX21jb250cm9sX2FjdGlvbl9uZXh0W3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X2ZmICAgW3RyaWddIDw9IGNzcl9tY29udHJvbF9oaXRfbmV4dFt0cmlnXTsKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGlmIChjc3JfbWNvbnRyb2xfdXBkW3RyaWddKSBiZWdpbgorICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9UREFUQTFfRE1PREVdOworICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9NXTsKKyAgICAgICAgY3NyX21jb250cm9sX2V4ZWNfbmV4dCAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfRVhFQ1VURV07CisgICAgICAgIGNzcl9tY29udHJvbF9sb2FkX25leHQgIFt0cmlnXSA9IGNzcl93cl9kYXRhW1NDUjFfVERVX01DT05UUk9MX0xPQURdOworICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9TVE9SRV07CisgICAgICAgIGNzcl9tY29udHJvbF9hY3Rpb25fbmV4dFt0cmlnXSA9IChjc3Jfd3JfZGF0YVtTQ1IxX1REVV9NQ09OVFJPTF9BQ1RJT05fSEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlNDUjFfVERVX01DT05UUk9MX0FDVElPTl9MT10gPT0gJ2IxKTsKKyAgICAgICAgY3NyX21jb250cm9sX2hpdF9uZXh0ICAgW3RyaWddID0gY3NyX3dyX2RhdGFbU0NSMV9URFVfTUNPTlRST0xfSElUXTsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBjc3JfbWNvbnRyb2xfZG1vZGVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZG1vZGVfZmYgW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfbV9uZXh0ICAgICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbV9mZiAgICAgW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfZXhlY19uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfZXhlY19mZiAgW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfbG9hZF9uZXh0ICBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfbG9hZF9mZiAgW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfc3RvcmVfbmV4dCBbdHJpZ10gPSBjc3JfbWNvbnRyb2xfc3RvcmVfZmYgW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfYWN0aW9uX25leHRbdHJpZ10gPSBjc3JfbWNvbnRyb2xfYWN0aW9uX2ZmW3RyaWddOworICAgICAgICBjc3JfbWNvbnRyb2xfaGl0X25leHQgICBbdHJpZ10gPSBleHUydGR1X2JwX3JldGlyZV9pW3RyaWddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEnYjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3NyX21jb250cm9sX2hpdF9mZlt0cmlnXTsKKyAgICBlbmQKK2VuZAorCisvLyBUREFUQTIgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjc3JfdGRhdGEyX3VwZFt0cmlnXSA9IH5jc3JfbWNvbnRyb2xfZG1vZGVfZmZbdHJpZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNsa19lbiAmIGNzcl9hZGRyX3RkYXRhMlt0cmlnXSAmIGNzcl93cl9yZXEgJiB0ZHVfZHNibF9pOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoY3NyX3RkYXRhMl91cGRbdHJpZ10pIGJlZ2luCisgICAgICAgIGNzcl90ZGF0YTJfZmZbdHJpZ10gPD0gY3NyX3dyX2RhdGE7CisgICAgZW5kCitlbmQKKworZW5kCitlbmRnZW5lcmF0ZSAvLyBnYmxvY2tfbXRyaWcKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFREVSA8LT4gRVhVIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGNzcl9pY291bnRfaGl0ID0gfnRkdV9kc2JsX2kgJiBjc3JfaWNvdW50X21fZmYKKyAgICAgICAgICAgICAgICAgICAgICA/IGV4dTJ0ZHVfaW1vbl9pLnZkICYgKGNzcl9pY291bnRfY291bnRfZmYgPT0gMTQnYjEpICYgfmNzcl9pY291bnRfc2tpcF9mZgorICAgICAgICAgICAgICAgICAgICAgIDogMSdiMDsKKworYGlmbmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KK2Fzc2lnbiB0ZHUyZXh1X2licmtwdF9tYXRjaF9vICAgPSBjc3JfbWNvbnRyb2xfZXhlY19oaXQ7Cithc3NpZ24gdGR1MmV4dV9pYnJrcHRfZXhjX3JlcV9vID0gfGNzcl9tY29udHJvbF9leGVjX2hpdDsKK2BlbHNlCithc3NpZ24gdGR1MmV4dV9pYnJrcHRfbWF0Y2hfbyAgID0ge2Nzcl9pY291bnRfaGl0LCBjc3JfbWNvbnRyb2xfZXhlY19oaXR9OworYXNzaWduIHRkdTJleHVfaWJya3B0X2V4Y19yZXFfbyA9IHxjc3JfbWNvbnRyb2xfZXhlY19oaXQgfCBjc3JfaWNvdW50X2hpdDsKK2BlbmRpZiAvLyBTQ1IxX1REVV9JQ09VTlRfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFREVSA8LT4gTFNVIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQnJlYWtwb2ludCBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJhdGUKK2ZvciAodHJpZyA9IDA7ICR1bnNpZ25lZCh0cmlnKSA8IE1UUklHX05VTTsgKyt0cmlnKSBiZWdpbiA6IGdibG9ja19icmVha190cmlnCithc3NpZ24gY3NyX21jb250cm9sX2V4ZWNfaGl0W3RyaWddID0gfnRkdV9kc2JsX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjc3JfbWNvbnRyb2xfbV9mZlt0cmlnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGNzcl9tY29udHJvbF9leGVjX2ZmW3RyaWddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgZXh1MnRkdV9pbW9uX2kudmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBleHUydGR1X2ltb25faS5hZGRyID09IGNzcl90ZGF0YTJfZmZbdHJpZ107CitlbmQKK2VuZGdlbmVyYXRlCisKK2BpZm5kZWYgU0NSMV9URFVfSUNPVU5UX0VOCithc3NpZ24gdGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9vID0gfGNzcl9tY29udHJvbF9leGVjX2hpdDsKK2BlbHNlCithc3NpZ24gdGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9vID0gfGNzcl9tY29udHJvbF9leGVjX2hpdCB8IGNzcl9pY291bnRfaGl0OworYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgorCisvLyBXYXRjaHBvaW50IGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmF0ZQorZm9yKCB0cmlnID0gMDsgJHVuc2lnbmVkKHRyaWcpIDwgTVRSSUdfTlVNOyArK3RyaWcgKSBiZWdpbiA6IGdibG9ja193YXRjaF90cmlnCithc3NpZ24gY3NyX21jb250cm9sX2xkc3RfaGl0W3RyaWddID0gfnRkdV9kc2JsX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBjc3JfbWNvbnRyb2xfbV9mZlt0cmlnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGxzdTJ0ZHVfZG1vbl9pLnZkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKCAoY3NyX21jb250cm9sX2xvYWRfZmYgW3RyaWddICYgbHN1MnRkdV9kbW9uX2kubG9hZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChjc3JfbWNvbnRyb2xfc3RvcmVfZmZbdHJpZ10gJiBsc3UydGR1X2Rtb25faS5zdG9yZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgbHN1MnRkdV9kbW9uX2kuYWRkciA9PSBjc3JfdGRhdGEyX2ZmW3RyaWddOworZW5kCitlbmRnZW5lcmF0ZQorCithc3NpZ24gdGR1MmxzdV9kYnJrcHRfbWF0Y2hfbyAgID0gY3NyX21jb250cm9sX2xkc3RfaGl0OworYXNzaWduIHRkdTJsc3VfZGJya3B0X2V4Y19yZXFfbyA9IHxjc3JfbWNvbnRyb2xfbGRzdF9oaXQ7CisKK2BpZm5kZWYgU0NSMV9URFVfRU4KK2Fzc2lnbiB0ZHUybHN1X2Jya19lbl9vID0gfGNzcl9tY29udHJvbF9tX2ZmIHwgY3NyX2ljb3VudF9tX2ZmOworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBURFUgPC0+IEhEVSBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgdGR1MmhkdV9kbW9kZV9yZXFfbyA9IDEnYjA7CisKKyAgICBmb3IoaW50IHVuc2lnbmVkIGkgPSAwOyBpIDwgTVRSSUdfTlVNOyArK2kpIGJlZ2luCisgICAgICAgIHRkdTJoZHVfZG1vZGVfcmVxX28gfD0gKGNzcl9tY29udHJvbF9hY3Rpb25fZmZbaV0gJiBleHUydGR1X2JwX3JldGlyZV9pW2ldKTsKKyAgICBlbmQKK2BpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KKyAgICB0ZHUyaGR1X2Rtb2RlX3JlcV9vIHw9IChjc3JfaWNvdW50X2FjdGlvbl9mZiAmIGV4dTJ0ZHVfYnBfcmV0aXJlX2lbQUxMVFJJR19OVU0tMV0pOworYGVuZGlmIC8vIFNDUjFfVERVX0lDT1VOVF9FTgorZW5kCisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1ZBX1REVV9YX0NPTlRST0wgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oe2Nsa19lbiwgdGR1X2RzYmxfaSwgY3NyMnRkdV9yZXFfaSwKKyAgICAgICAgICAgICAgICAgZXh1MnRkdV9pbW9uX2kudmQsIGxzdTJ0ZHVfZG1vbl9pLnZkLCBleHUydGR1X2JwX3JldGlyZV9pfSkKKyAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNvbnRyb2wgc2lnbmFscyBpcyBYIC0gJTBiIiwge2Nsa19lbiwKKyAgICB0ZHVfZHNibF9pLCBjc3IydGR1X3JlcV9pLCBleHUydGR1X2ltb25faS52ZCwgbHN1MnRkdV9kbW9uX2kudmQsIGV4dTJ0ZHVfYnBfcmV0aXJlX2l9KTsKKworU1ZBX0RNX1hfQ0xLX0VOIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKGNsa19lbikKKyAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGNsa19lbiBjb250cm9sIHNpZ25hbHMgaXMgWCIpOworCitTVkFfRE1fWF9EU0JMIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHRkdV9kc2JsX2kpCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiB0ZHVfZHNibF9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7CisKK1NWQV9ETV9YX0NTUjJURFVfUkVRIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKGNzcjJ0ZHVfcmVxX2kpCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IydGR1X3JlcV9pIGNvbnRyb2wgc2lnbmFscyBpcyBYIik7CisKK1NWQV9ETV9YX0lfTU9OX1ZEIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKGV4dTJ0ZHVfaW1vbl9pLnZkKQorICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZXh1MnRkdV9pbW9uX2kudmQgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKKworU1ZBX0RNX1hfRF9NT05fVkQgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24obHN1MnRkdV9kbW9uX2kudmQpCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBsc3UydGR1X2Rtb25faS52ZCBjb250cm9sIHNpZ25hbHMgaXMgWCIpOworCitTVkFfRE1fWF9CUF9SRVRJUkUgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oZXh1MnRkdV9icF9yZXRpcmVfaSkKKyAgICApIGVsc2UgJGVycm9yKCJURFUgRXJyb3I6IGV4dTJ0ZHVfYnBfcmV0aXJlX2kgY29udHJvbCBzaWduYWxzIGlzIFgiKTsKKworU1ZBX1REVV9YX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBjc3IydGR1X3JlcV9pIHwtPiAhJGlzdW5rbm93bih7Y3NyMnRkdV9jbWRfaSxjc3IydGR1X2FkZHJfaX0pCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3IgaXMgWCIpOworCitTVkFfVERVX1hXX0NTUiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAoY3NyMnRkdV9yZXFfaSAmIGNzcl93cl9yZXEpIHwtPiAhJGlzdW5rbm93bihjc3IydGR1X3dkYXRhX2kpCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBjc3Igd2RhdGEgaXMgWCAiKTsKKworU1ZBX1REVV9YX0lNT04gOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgZXh1MnRkdV9pbW9uX2kudmQgfC0+ICEkaXN1bmtub3duKHtleHUydGR1X2ltb25faS5yZXEsZXh1MnRkdV9pbW9uX2kuYWRkcn0pCisgICAgKSBlbHNlICRlcnJvcigiVERVIEVycm9yOiBpbW9uaXRvciBpcyBYIik7CisKK1NWQV9URFVfWF9ETU9OIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGxzdTJ0ZHVfZG1vbl9pLnZkIHwtPiAhJGlzdW5rbm93bih7bHN1MnRkdV9kbW9uX2l9KQorICAgICkgZWxzZSAkZXJyb3IoIlREVSBFcnJvcjogZG1vbml0b3IgaXMgWCIpOworCitgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KKworZW5kbW9kdWxlIDogc2NyMV9waXBlX3RkdQorCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV90b3Auc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWEwZDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdG9wLnN2CkBAIC0wLDAgKzEsODA5IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfdG9wLnN2PgorLy8vIEBicmllZiAgICAgIFNDUjEgcGlwZWxpbmUgdG9wCisvLy8KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCitgaW5jbHVkZSAic2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoIgorYGluY2x1ZGUgInNjcjFfY3NyLnN2aCIKKworYGlmZGVmIFNDUjFfSVBJQ19FTgorYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9URFVfRU4KK2BpbmNsdWRlICJzY3IxX3RkdS5zdmgiCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworbW9kdWxlIHNjcjFfcGlwZV90b3AgKAorICAgIC8vIENvbW1vbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX3JzdF9uLCAgICAgICAgICAgICAgICAgLy8gUGlwZSByZXNldAorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyaGR1X3JkY19xbGZ5X2ksICAgICAgICAvLyBQaXBlIFJEQyBxdWFsaWZpZXIKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJnX3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIERlYnVnIHJlc2V0CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBpcGUgY2xvY2sKKworICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJpbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIElNRU0gcmVxdWVzdAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmltZW1fY21kX28sICAgICAgICAgICAgLy8gSU1FTSBjb21tYW5kCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgIHBpcGUyaW1lbV9hZGRyX28sICAgICAgICAgICAvLyBJTUVNIGFkZHJlc3MKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbTJwaXBlX3JlcV9hY2tfaSwgICAgICAgIC8vIElNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBpbWVtMnBpcGVfcmRhdGFfaSwgICAgICAgICAgLy8gSU1FTSByZWFkIGRhdGEKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgaW1lbTJwaXBlX3Jlc3BfaSwgICAgICAgICAgIC8vIElNRU0gcmVzcG9uc2UKKworICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtZW1fcmVxX28sICAgICAgICAgICAgLy8gRE1FTSByZXF1ZXN0CisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1lbV9jbWRfbywgICAgICAgICAgICAvLyBETUVNIGNvbW1hbmQKKyAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbWVtX3dpZHRoX28sICAgICAgICAgIC8vIERNRU0gZGF0YSB3aWR0aAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICBwaXBlMmRtZW1fYWRkcl9vLCAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgIHBpcGUyZG1lbV93ZGF0YV9vLCAgICAgICAgICAvLyBETUVNIHdyaXRlIGRhdGEKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJwaXBlX3JlcV9hY2tfaSwgICAgICAgIC8vIERNRU0gcmVxdWVzdCBhY2tub3dsZWRnZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICBkbWVtMnBpcGVfcmRhdGFfaSwgICAgICAgICAgLy8gRE1FTSByZWFkIGRhdGEKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgZG1lbTJwaXBlX3Jlc3BfaSwgICAgICAgICAgIC8vIERNRU0gcmVzcG9uc2UKKworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLy8gRGVidWcgaW50ZXJmYWNlOgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfZW4sICAgICAgICAgICAgICAgICAgICAgLy8gMSAtIGRlYnVnIG9wZXJhdGlvbnMgZW5hYmxlZAorICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0ycGlwZV9hY3RpdmVfaSwgICAgICAgICAgIC8vIERlYnVnIE1vZHVsZSBhY3RpdmUgZmxhZworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2NtZF9yZXFfaSwgICAgICAgICAgLy8gUmVxdWVzdCBmcm9tIERlYnVnIE1vZHVsZQorICAgIGlucHV0ICB0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2NtZF9pLCAgICAgICAgICAgICAgLy8gQ29tbWFuZCBmcm9tIERlYnVnIE1vZHVsZQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yZXNwX28sICAgICAgICAgLy8gUmVzcG9uc2UgdG8gRGVidWcgTW9kdWxlCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fY21kX3Jjb2RlX28sICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgcmV0dXJuIGNvZGU6IDAgLSBPazsgMSAtIEVycm9yCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9ldmVudF9vLCAgICAgICAvLyBIQVJUIGV2ZW50IGZsYWcKKyAgICBvdXRwdXQgdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9oYXJ0X3N0YXR1c19vLCAgICAgIC8vIEhBUlQgc3RhdHVzCisKKyAgICAvLyBETSA8LT4gUGlwZWxpbmU6IFByb2dyYW0gQnVmZmVyIC0gSEFSVCBpbnN0cnVjdGlvbiBleGVjdXRpb24gaS9mCisgICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgIHBpcGUyZG1fcGJ1Zl9hZGRyX28sICAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBhZGRyZXNzCisgICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICAgICAgIGRtMnBpcGVfcGJ1Zl9pbnN0cl9pLCAgICAgICAvLyBQcm9ncmFtIEJ1ZmZlciBpbnN0cnVjdGlvbgorCisgICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJkbV9kcmVnX3JlcV9vLCAgICAgICAgIC8vIEFic3RyYWN0IERhdGEgUmVnaXN0ZXIgcmVxdWVzdAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfd3JfbywgICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZQorICAgIG91dHB1dCBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfd2RhdGFfbywgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZSBkYXRhCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfZHJlZ19yZXNwX2ksICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlc3BvbnNlCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfZHJlZ19mYWlsX2ksICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIGZhaWwgLSBwb3NzaWJseSBub3QgbmVlZGVkPworICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmRhdGFfaSwgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZWFkIGRhdGEKKworICAgIC8vIERNIDwtPiBQaXBlbGluZzogUEMgaS9mCisgICAgb3V0cHV0IGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fcGNfc2FtcGxlX28sICAgICAgICAvLyBDdXJyZW50IFBDIGZvciBzYW1wbGluZworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBJUlEKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KKyAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0lSUV9MSU5FU19OVU0tMTowXSAgICAgICAgICAgICAgc29jMnBpcGVfaXJxX2xpbmVzX2ksICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0IGxpbmVzCitgZWxzZSAvLyBTQ1IxX0lQSUNfRU4KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMnBpcGVfaXJxX2V4dF9pLCAgICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0CitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYzJwaXBlX2lycV9zb2Z0X2ksICAgICAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgaW50ZXJydXB0IHJlcXVlc3QKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMnBpcGVfaXJxX210aW1lcl9pLCAgICAgIC8vIE1hY2hpbmUgdGltZXIgaW50ZXJydXB0IHJlcXVlc3QKKworICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKKyAgICBpbnB1dCAgIGxvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jMnBpcGVfbXRpbWVyX3ZhbF9pLCAgICAgIC8vIE1hY2hpbmUgdGltZXIgdmFsdWUKKworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIC8vIENMS19DVFJMIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmNsa2N0bF9zbGVlcF9yZXFfbywgICAgLy8gQ0xLIGRpc2FibGUgcmVxdWVzdCB0byBDTEsgZ2F0aW5nIGNpcmN1aXQKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJjbGtjdGxfd2FrZV9yZXFfbywgICAgIC8vIENMSyBlbmFibGUgcmVxdWVzdCB0byBDTEsgZ2F0aW5nIGNpcmN1aXQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9pLCAgIC8vIE5vdCBnYXRlZCBDTEsKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2RiZ2NfaSwgICAgIC8vIENMSyBmb3IgSERVIChub3QgZ2F0ZWQgZm9yIG5vdykKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrY3RsMnBpcGVfY2xrX2VuX2ksICAgICAgIC8vIENMSyBlbmFibGVkIGZsYWcKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKworICAgIC8vIEZ1c2UKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgc29jMnBpcGVfZnVzZV9taGFydGlkX2kgICAgIC8vIEZ1c2UgTUhBUlRJRCB2YWx1ZQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUGlwZWxpbmUgY29udHJvbAorbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjdXJyX3BjOyAgICAgICAgICAgICAgICAvLyBDdXJyZW50IFBDCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIG5leHRfcGM7ICAgICAgICAgICAgICAgIC8vIElzIHdyaXR0ZW4gdG8gTUVQQyBvbiBpbnRlcnJ1cHQgdHJhcAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGNfcmVxOyAgICAgICAgICAgICAvLyBOZXcgUEMgcmVxdWVzdCAoanVtcHMsIGJyYW5jaGVzLCB0cmFwcyBldGMpCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIG5ld19wYzsgICAgICAgICAgICAgICAgIC8vIE5ldyBQQworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BfZmV0Y2g7ICAgICAgICAgICAgIC8vIFN0b3AgSUZVCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9leGNfcmVxOyAgICAgICAgICAgIC8vIEV4Y2VwdGlvbiByZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJya3B0OyAgICAgICAgICAgICAgICAgIC8vIEJyZWFrcG9pbnQgKHN3KSBvbiBjdXJyZW50IGluc3RydWN0aW9uCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9pbml0X3BjOyAgICAgICAgICAgIC8vIFJlc2V0IGV4aXQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ZpX3J1bjJoYWx0OyAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBXRkkgaGFsdGVkIHN0YXRlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyZXQ7ICAgICAgICAgICAgICAgIC8vIEluc3RydWN0aW9uIHJldGlyZW1lbnQgKHdpdGggb3Igd2l0aG91dCBleGNlcHRpb24pCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyZXRfbmV4YzsgICAgICAgICAgIC8vIEluc3RydWN0aW9uIHJldGlyZW1lbnQgKHdpdGhvdXQgZXhjZXB0aW9uKQorYGlmZGVmIFNDUjFfSVBJQ19FTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGljMmNzcl9pcnE7ICAgICAgICAgICAvLyBJUlEgcmVxdWVzdCBmcm9tIElQSUMKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KK2BpZmRlZiBTQ1IxX1REVV9FTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmtwdF9odzsgICAgICAgICAgICAgICAvLyBIYXJkd2FyZSBicmVha3BvaW50IG9uIGN1cnJlbnQgaW5zdHJ1Y3Rpb24KK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3R4bnNfcGVuZGluZzsgICAgICAvLyBUaGVyZSBhcmUgcGVuZGluZyBpbWVtIHRyYW5zYWN0aW9ucworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZmlfaGFsdGVkOyAgICAgICAgICAgICAvLyBXRkkgaGFsdGVkIHN0YXRlCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKKy8vIElGVSA8LT4gSURVCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfdmQ7ICAgICAgICAgICAgIC8vIElGVSByZXF1ZXN0Citsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgIGlmdTJpZHVfaW5zdHI7ICAgICAgICAgIC8vIElGVSBpbnN0cnVjdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnUyaWR1X2ltZW1fZXJyOyAgICAgICAvLyBJRlUgaW5zdHJ1Y3Rpb24gYWNjZXNzIGZhdWx0Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJpZHVfZXJyX3J2aV9oaTsgICAgIC8vIDEgLSBpbWVtIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGZldGNoIHNlY29uZCBoYWxmIG9mIGFuIHVuYWxpZ25lZCBSVkkgaW5zdHJ1Y3Rpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmlmdV9yZHk7ICAgICAgICAgICAgLy8gSURVIHJlYWR5IGZvciBuZXcgZGF0YQorCisvLyBJRFUgPC0+IEVYVQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3JlcTsgICAgICAgICAgICAvLyBJRFUgcmVxdWVzdAordHlwZV9zY3IxX2V4dV9jbWRfcyAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X2NtZDsgICAgICAgICAgICAvLyBJRFUgY29tbWFuZCAoc2VlIHNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aCkKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMxOyAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyByczEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcnMyOyAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyByczIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR1MmV4dV91c2VfcmQ7ICAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdXNlcyByZAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHUyZXh1X3VzZV9pbW07ICAgICAgICAvLyBJbnN0cnVjdGlvbiB1c2VzIGltbWVkaWF0ZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyaWR1X3JkeTsgICAgICAgICAgICAvLyBFWFUgcmVhZHkgZm9yIG5ldyBkYXRhCisKKy8vIEVYVSA8LT4gTVBSRgorbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICAgICAgICBleHUybXByZl9yczFfYWRkcjsgICAgICAvLyBNUFJGIHJzMSByZWFkIGFkZHJlc3MKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgbXByZjJleHVfcnMxX2RhdGE7ICAgICAgLy8gTVBSRiByczEgcmVhZCBkYXRhCitsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICAgICAgICAgIGV4dTJtcHJmX3JzMl9hZGRyOyAgICAgIC8vIE1QUkYgcnMyIHJlYWQgYWRkcmVzcworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBtcHJmMmV4dV9yczJfZGF0YTsgICAgICAvLyBNUFJGIHJzMiByZWFkIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1Mm1wcmZfd19yZXE7ICAgICAgICAgLy8gTVBSRiB3cml0ZSByZXF1ZXN0Citsb2dpYyBbYFNDUjFfTVBSRl9BV0lEVEgtMTowXSAgICAgICAgICAgICAgIGV4dTJtcHJmX3JkX2FkZHI7ICAgICAgIC8vIE1QUkYgcmQgd3JpdGUgYWRkcmVzcworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBleHUybXByZl9yZF9kYXRhOyAgICAgICAvLyBNUFJGIHJkIHdyaXRlIGRhdGEKKworLy8gRVhVIDwtPiBDU1IKK2xvZ2ljIFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gICAgICAgICAgICAgZXh1MmNzcl9yd19hZGRyOyAgICAgICAgLy8gQ1NSIHJlYWQvd3JpdGUgYWRkcmVzcworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3JfcmVxOyAgICAgICAgICAvLyBDU1IgcmVhZCByZXF1ZXN0Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfcl9kYXRhOyAgICAgICAgIC8vIENTUiByZWFkIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X3JlcTsgICAgICAgICAgLy8gQ1NSIHdyaXRlIHJlcXVlc3QKK3R5cGVfc2NyMV9jc3JfY21kX3NlbF9lICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X2NtZDsgICAgICAgICAgLy8gQ1NSIHdyaXRlIGNvbW1hbmQKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl93X2RhdGE7ICAgICAgICAgLy8gQ1NSIHdyaXRlIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmV4dV9yd19leGM7ICAgICAgICAgLy8gQ1NSIHJlYWQvd3JpdGUgYWNjZXNzIGV4Y2VwdGlvbgorCisvLyBFWFUgPC0+IENTUiBldmVudCBpbnRlcmZhY2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90YWtlX2lycTsgICAgICAgLy8gVGFrZSBJUlEgdHJhcAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX3Rha2VfZXhjOyAgICAgICAvLyBUYWtlIGV4Y2VwdGlvbiB0cmFwCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfbXJldF91cGRhdGU7ICAgIC8vIE1SRVQgdXBkYXRlIENTUgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHUyY3NyX21yZXRfaW5zdHI7ICAgICAvLyBNUkVUIGluc3RydWN0aW9uCit0eXBlX3NjcjFfZXhjX2NvZGVfZSAgICAgICAgICAgICAgICAgICAgICAgIGV4dTJjc3JfZXhjX2NvZGU7ICAgICAgIC8vIEV4Y2VwdGlvbiBjb2RlIChzZWUgc2NyMV9hcmNoX3R5cGVzLnN2aCkKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZXh1MmNzcl90cmFwX3ZhbDsgICAgICAgLy8gVHJhcCB2YWx1ZQorbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X25ld19wYzsgICAgICAgICAvLyBFeGNlcHRpb24vSVJRL01SRVQgbmV3IFBDCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfaXJxOyAgICAgICAgICAgIC8vIElSUSByZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJleHVfaXBfaWU7ICAgICAgICAgIC8vIFNvbWUgSVJRIHBlbmRpbmcgYW5kIGxvY2FsbHkgZW5hYmxlZAorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyZXh1X21zdGF0dXNfbWllX3VwOyAvLyBNU1RBVFVTIG9yIE1JRSB1cGRhdGUgaW4gdGhlIGN1cnJlbnQgY3ljbGUKKworYGlmZGVmIFNDUjFfSVBJQ19FTgorLy8gQ1NSIDwtPiBJUElDCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3JfcmVxOyAgICAgICAgIC8vIElQSUMgcmVhZCByZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJpcGljX3dfcmVxOyAgICAgICAgIC8vIElQSUMgd3JpdGUgcmVxdWVzdAorbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaXBpY19hZGRyOyAgICAgICAgICAvLyBJUElDIGFkZHJlc3MKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMmlwaWNfd2RhdGE7ICAgICAgICAgLy8gSVBJQyB3cml0ZSBkYXRhCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgIGlwaWMyY3NyX3JkYXRhOyAgICAgICAgIC8vIElQSUMgcmVhZCBkYXRhCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorLy8gQ1NSIDwtPiBURFUKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV9yZXE7ICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIFREVQordHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBjc3IydGR1X2NtZDsgICAgICAgICAgIC8vIFREVSBjb21tYW5kCitsb2dpYyBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gICAgICAgIGNzcjJ0ZHVfYWRkcjsgICAgICAgICAgLy8gVERVIGFkZHJlc3MKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgY3NyMnRkdV93ZGF0YTsgICAgICAgICAvLyBURFUgd3JpdGUgZGF0YQorbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICB0ZHUyY3NyX3JkYXRhOyAgICAgICAgIC8vIFREVSByZWFkIGRhdGEKK3R5cGVfc2NyMV9jc3JfcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmNzcl9yZXNwOyAgICAgICAgICAvLyBURFUgcmVzcG9uc2UKKyBgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhbGlmaWVkIFREVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBkb21haW46Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0ZHVfcmVxX3FsZnk7ICAgICAgLy8gICAgIFJlcXVlc3QgdG8gVERVCisgYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKy8vIEVYVS9MU1UgPC0+IFREVQordHlwZV9zY3IxX2Jya21faW5zdHJfbW9uX3MgICAgICAgICAgICAgICAgICBleHUydGR1X2lfbW9uOyAgICAgICAgIC8vIEluc3RydWN0aW9uIG1vbml0b3IKK3R5cGVfc2NyMV9icmttX2xzdV9tb25fcyAgICAgICAgICAgICAgICAgICAgbHN1MnRkdV9kX21vbjsgICAgICAgICAvLyBEYXRhIG1vbml0b3IKK2xvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xOjBdICAgICAgICAgICAgdGR1MmV4dV9pX21hdGNoOyAgICAgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50KHMpIG1hdGNoCitsb2dpYyBbU0NSMV9URFVfTVRSSUdfTlVNLTE6MF0gICAgICAgICAgICAgIHRkdTJsc3VfZF9tYXRjaDsgICAgICAgLy8gRGF0YSBicmVha3BvaW50KHMpIG1hdGNoCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkdTJleHVfaV94X3JlcTsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBleGNlcHRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGR1MmxzdV9pX3hfcmVxOyAgICAgICAvLyBJbnN0cnVjdGlvbiBicmVha3BvaW50IGV4Y2VwdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUybHN1X2RfeF9yZXE7ICAgICAgIC8vIERhdGEgYnJlYWtwb2ludCBleGNlcHRpb24KK2xvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xOjBdICAgICAgICAgICAgZXh1MnRkdV9icF9yZXRpcmU7ICAgICAvLyBJbnN0cnVjdGlvbiB3aXRoIGJyZWFrcG9pbnQgZmxhZyByZXRpcmUKKyBgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhbGlmaWVkIFREVSBpbnB1dCBzaWduYWxzIGZyb20gcGlwZV9yc3RfbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBkb21haW46Cit0eXBlX3NjcjFfYnJrbV9pbnN0cl9tb25fcyAgICAgICAgICAgICAgICAgIGV4dTJ0ZHVfaV9tb25fcWxmeTsgICAgICAgICAvLyBJbnN0cnVjdGlvbiBtb25pdG9yCit0eXBlX3NjcjFfYnJrbV9sc3VfbW9uX3MgICAgICAgICAgICAgICAgICAgIGxzdTJ0ZHVfZF9tb25fcWxmeTsgICAgICAgICAvLyBEYXRhIG1vbml0b3IKK2xvZ2ljIFtTQ1IxX1REVV9BTExUUklHX05VTS0xOjBdICAgICAgICAgICAgZXh1MnRkdV9icF9yZXRpcmVfcWxmeTsgICAgIC8vIEluc3RydWN0aW9uIHdpdGggYnJlYWtwb2ludCBmbGFnIHJldGlyZQorIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorLy8gRGVidWcgc2lnbmFsczoKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfcGJ1ZjsgICAgICAgICAgICAgLy8gRmV0Y2ggaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIGJ5IFByb2dyYW0gQnVmZmVyICh2aWEgSERVKQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3JlcTsgICAgICAgICAgICAvLyBSZXF1ZXN0IHRvIEhEVQordHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X2NtZDsgICAgICAgICAgICAvLyBIRFUgY29tbWFuZAorbG9naWMgW1NDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgtMTowXSAgICBjc3IyaGR1X2FkZHI7ICAgICAgICAgICAvLyBIRFUgYWRkcmVzcworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBjc3IyaGR1X3dkYXRhOyAgICAgICAgICAvLyBIRFUgd3JpdGUgZGF0YQorbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICBoZHUyY3NyX3JkYXRhOyAgICAgICAgICAvLyBIRFUgcmVhZCBkYXRhCit0eXBlX3NjcjFfY3NyX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJjc3JfcmVzcDsgICAgICAgICAgIC8vIEhEVSByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFsaWZpZWQgSERVIGlucHV0IHNpZ25hbHMgZnJvbSBwaXBlX3JzdF9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGRvbWFpbjoKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMmhkdV9yZXFfcWxmeTsgICAgICAgLy8gICAgIFJlcXVlc3QgdG8gSERVCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdicmtfZHNibDsgICAgICAgICAgICAgLy8gRGlzYWJsZXMgVERVCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9od2Jya19kc2JsOyAgICAgICAgIC8vIERpc2FibGVzIFREVQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHUyaGR1X2Rtb2RlX3JlcTsgICAgICAvLyBURFUgcmVxdWVzdHMgdHJhbnNpdGlvbiB0byBkZWJ1ZyBtb2RlCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X25vX2NvbW1pdDsgICAgICAgICAgLy8gRm9yYmlkIGluc3RydWN0aW9uIGNvbW1pdG1lbnQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X2lycV9kc2JsOyAgICAgICAgICAgLy8gRGlzYWJsZSBJUlEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1X3BjX2Fkdm10X2RzYmw7ICAgICAgLy8gRm9yYmlkIFBDIGFkdmFuY2VtZW50Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9kbW9kZV9zc3RlcF9lbjsgICAgIC8vIEVuYWJsZSBzaW5nbGUtc3RlcAorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiZ19oYWx0ZWQ7ICAgICAgICAgICAgIC8vIERlYnVnIGhhbHRlZCBzdGF0ZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfcnVuMmhhbHQ7ICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIGRlYnVnIGhhbHRlZCBzdGF0ZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfaGFsdDJydW47ICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHJ1biBzdGF0ZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmdfcnVuX3N0YXJ0OyAgICAgICAgICAvLyBGaXJzdCBjeWNsZSBvZiBydW4gc3RhdGUKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgZGJnX25ld19wYzsgICAgICAgICAgICAgLy8gTmV3IFBDIGFzIHN0YXJ0aW5nIHBvaW50IGZvciBIQVJUIFJlc3VtZQorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmdTJoZHVfcGJ1Zl9yZHk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJpZnVfcGJ1Zl92ZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1MmlmdV9wYnVmX2VycjsKK2xvZ2ljIFtTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRILTE6MF0gICAgICAgaGR1MmlmdV9wYnVmX2luc3RyOworCisvLyBRdWFsaWZpZWQgSERVIGlucHV0IHNpZ25hbHMgZnJvbSBwaXBlX3JzdF9uIHJlc2V0IGRvbWFpbjoKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ1MmhkdV9wYnVmX3JkeV9xbGZ5OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHVfYnVzeV9xbGZ5OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cmV0X3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9pbml0X3BjX3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9leGNfcmVxX3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJya3B0X3FsZnk7CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dV9idXN5OworCisKK2BpZm5kZWYgU0NSMV9DTEtDVFJMX0VOCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyY2xrY3RsX3dha2VfcmVxX287CitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGlwZWxpbmUgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIHN0b3BfZmV0Y2ggICA9IHdmaV9ydW4yaGFsdAorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgIHwgZmV0Y2hfcGJ1ZgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisgICAgICAgICAgICAgICAgICAgIDsKKworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorYXNzaWduIHBpcGUyY2xrY3RsX3NsZWVwX3JlcV9vID0gd2ZpX2hhbHRlZCAmIH5pbWVtX3R4bnNfcGVuZGluZzsKK2Fzc2lnbiBwaXBlMmNsa2N0bF93YWtlX3JlcV9vICA9IGNzcjJleHVfaXBfaWUKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICB8IGRtMnBpcGVfYWN0aXZlX2kKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgICAgICAgICAgICAgICAgICA7CitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorYXNzaWduIHBpcGUyZG1fcGNfc2FtcGxlX28gPSBjdXJyX3BjOworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5zdHJ1Y3Rpb24gZmV0Y2ggdW5pdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3BpcGVfaWZ1IGlfcGlwZV9pZnUgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAorCisgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQorICAgIC5pbWVtMmlmdV9yZXFfYWNrX2kgICAgICAgKGltZW0ycGlwZV9yZXFfYWNrX2kpLAorICAgIC5pZnUyaW1lbV9yZXFfbyAgICAgICAgICAgKHBpcGUyaW1lbV9yZXFfbyAgICApLAorICAgIC5pZnUyaW1lbV9jbWRfbyAgICAgICAgICAgKHBpcGUyaW1lbV9jbWRfbyAgICApLAorICAgIC5pZnUyaW1lbV9hZGRyX28gICAgICAgICAgKHBpcGUyaW1lbV9hZGRyX28gICApLAorICAgIC5pbWVtMmlmdV9yZGF0YV9pICAgICAgICAgKGltZW0ycGlwZV9yZGF0YV9pICApLAorICAgIC5pbWVtMmlmdV9yZXNwX2kgICAgICAgICAgKGltZW0ycGlwZV9yZXNwX2kgICApLAorCisgICAgLy8gTmV3IFBDIGludGVyZmFjZQorICAgIC5leHUyaWZ1X3BjX25ld19yZXFfaSAgICAgKG5ld19wY19yZXEgICAgICAgICApLAorICAgIC5leHUyaWZ1X3BjX25ld19pICAgICAgICAgKG5ld19wYyAgICAgICAgICAgICApLAorICAgIC5waXBlMmlmdV9zdG9wX2ZldGNoX2kgICAgKHN0b3BfZmV0Y2ggICAgICAgICApLAorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAvLyBJRlUgPC0+IEhEVSBQcm9ncmFtIEJ1ZmZlciBpbnRlcmZhY2UKKyAgICAuaGR1MmlmdV9wYnVmX2ZldGNoX2kgICAgIChmZXRjaF9wYnVmICAgICAgICAgKSwKKyAgICAuaWZ1MmhkdV9wYnVmX3JkeV9vICAgICAgIChpZnUyaGR1X3BidWZfcmR5ICAgKSwKKyAgICAuaGR1MmlmdV9wYnVmX3ZkX2kgICAgICAgIChoZHUyaWZ1X3BidWZfdmQgICAgKSwKKyAgICAuaGR1MmlmdV9wYnVmX2Vycl9pICAgICAgIChoZHUyaWZ1X3BidWZfZXJyICAgKSwKKyAgICAuaGR1MmlmdV9wYnVmX2luc3RyX2kgICAgIChoZHUyaWZ1X3BidWZfaW5zdHIgKSwKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIC5pZnUycGlwZV9pbWVtX3R4bnNfcG5kX28gKGltZW1fdHhuc19wZW5kaW5nICApLAorYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorCisgICAgLy8gSUZVIDwtPiBJRFUgaW50ZXJmYWNlCisgICAgLmlkdTJpZnVfcmR5X2kgICAgICAgICAgICAoaWR1MmlmdV9yZHkgICAgICAgICksCisgICAgLmlmdTJpZHVfaW5zdHJfbyAgICAgICAgICAoaWZ1MmlkdV9pbnN0ciAgICAgICksCisgICAgLmlmdTJpZHVfaW1lbV9lcnJfbyAgICAgICAoaWZ1MmlkdV9pbWVtX2VyciAgICksCisgICAgLmlmdTJpZHVfZXJyX3J2aV9oaV9vICAgICAoaWZ1MmlkdV9lcnJfcnZpX2hpICksCisgICAgLmlmdTJpZHVfdmRfbyAgICAgICAgICAgICAoaWZ1MmlkdV92ZCAgICAgICAgICkKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5zdHJ1Y3Rpb24gZGVjb2RlIHVuaXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9waXBlX2lkdSBpX3BpcGVfaWR1ICgKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgIChwaXBlX3JzdF9uICAgICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisgICAgLmlkdTJpZnVfcmR5X28gICAgICAgICAgKGlkdTJpZnVfcmR5ICAgICAgICksCisgICAgLmlmdTJpZHVfaW5zdHJfaSAgICAgICAgKGlmdTJpZHVfaW5zdHIgICAgICksCisgICAgLmlmdTJpZHVfaW1lbV9lcnJfaSAgICAgKGlmdTJpZHVfaW1lbV9lcnIgICksCisgICAgLmlmdTJpZHVfZXJyX3J2aV9oaV9pICAgKGlmdTJpZHVfZXJyX3J2aV9oaSksCisgICAgLmlmdTJpZHVfdmRfaSAgICAgICAgICAgKGlmdTJpZHVfdmQgICAgICAgICksCisKKyAgICAuaWR1MmV4dV9yZXFfbyAgICAgICAgICAoaWR1MmV4dV9yZXEgICAgICAgKSwKKyAgICAuaWR1MmV4dV9jbWRfbyAgICAgICAgICAoaWR1MmV4dV9jbWQgICAgICAgKSwKKyAgICAuaWR1MmV4dV91c2VfcnMxX28gICAgICAoaWR1MmV4dV91c2VfcnMxICAgKSwKKyAgICAuaWR1MmV4dV91c2VfcnMyX28gICAgICAoaWR1MmV4dV91c2VfcnMyICAgKSwKKyAgICAuaWR1MmV4dV91c2VfcmRfbyAgICAgICAoaWR1MmV4dV91c2VfcmQgICAgKSwKKyAgICAuaWR1MmV4dV91c2VfaW1tX28gICAgICAoaWR1MmV4dV91c2VfaW1tICAgKSwKKyAgICAuZXh1MmlkdV9yZHlfaSAgICAgICAgICAoZXh1MmlkdV9yZHkgICAgICAgKQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeGVjdXRpb24gdW5pdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3BpcGVfZXh1IGlfcGlwZV9leHUgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgKSwKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KKyAgICAuY2xrX2Fsd19vbiAgICAgICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfYWx3X29uX2kpLAorICAgIC5jbGtfcGlwZV9lbiAgICAgICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19lbl9pKSwKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKworICAgIC8vIElEVSA8LT4gRVhVIGludGVyZmFjZQorICAgIC5pZHUyZXh1X3JlcV9pICAgICAgICAgICAgICAgICAgKGlkdTJleHVfcmVxICAgICAgICAgICAgICksCisgICAgLmV4dTJpZHVfcmR5X28gICAgICAgICAgICAgICAgICAoZXh1MmlkdV9yZHkgICAgICAgICAgICAgKSwKKyAgICAuaWR1MmV4dV9jbWRfaSAgICAgICAgICAgICAgICAgIChpZHUyZXh1X2NtZCAgICAgICAgICAgICApLAorICAgIC5pZHUyZXh1X3VzZV9yczFfaSAgICAgICAgICAgICAgKGlkdTJleHVfdXNlX3JzMSAgICAgICAgICksCisgICAgLmlkdTJleHVfdXNlX3JzMl9pICAgICAgICAgICAgICAoaWR1MmV4dV91c2VfcnMyICAgICAgICAgKSwKK2BpZm5kZWYgU0NSMV9OT19FWEVfU1RBR0UKKyAgICAuaWR1MmV4dV91c2VfcmRfaSAgICAgICAgICAgICAgIChpZHUyZXh1X3VzZV9yZCAgICAgICAgICApLAorICAgIC5pZHUyZXh1X3VzZV9pbW1faSAgICAgICAgICAgICAgKGlkdTJleHVfdXNlX2ltbSAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9OT19FWEVfU1RBR0UKKworICAgIC8vIEVYVSA8LT4gTVBSRiBpbnRlcmZhY2UKKyAgICAuZXh1Mm1wcmZfcnMxX2FkZHJfbyAgICAgICAgICAgIChleHUybXByZl9yczFfYWRkciAgICAgICApLAorICAgIC5tcHJmMmV4dV9yczFfZGF0YV9pICAgICAgICAgICAgKG1wcmYyZXh1X3JzMV9kYXRhICAgICAgICksCisgICAgLmV4dTJtcHJmX3JzMl9hZGRyX28gICAgICAgICAgICAoZXh1Mm1wcmZfcnMyX2FkZHIgICAgICAgKSwKKyAgICAubXByZjJleHVfcnMyX2RhdGFfaSAgICAgICAgICAgIChtcHJmMmV4dV9yczJfZGF0YSAgICAgICApLAorICAgIC5leHUybXByZl93X3JlcV9vICAgICAgICAgICAgICAgKGV4dTJtcHJmX3dfcmVxICAgICAgICAgICksCisgICAgLmV4dTJtcHJmX3JkX2FkZHJfbyAgICAgICAgICAgICAoZXh1Mm1wcmZfcmRfYWRkciAgICAgICAgKSwKKyAgICAuZXh1Mm1wcmZfcmRfZGF0YV9vICAgICAgICAgICAgIChleHUybXByZl9yZF9kYXRhICAgICAgICApLAorCisgICAgLy8gRVhVIDwtPiBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKKyAgICAuZXh1MmNzcl9yd19hZGRyX28gICAgICAgICAgICAgIChleHUyY3NyX3J3X2FkZHIgICAgICAgICApLAorICAgIC5leHUyY3NyX3JfcmVxX28gICAgICAgICAgICAgICAgKGV4dTJjc3Jfcl9yZXEgICAgICAgICAgICksCisgICAgLmNzcjJleHVfcl9kYXRhX2kgICAgICAgICAgICAgICAoY3NyMmV4dV9yX2RhdGEgICAgICAgICAgKSwKKyAgICAuZXh1MmNzcl93X3JlcV9vICAgICAgICAgICAgICAgIChleHUyY3NyX3dfcmVxICAgICAgICAgICApLAorICAgIC5leHUyY3NyX3dfY21kX28gICAgICAgICAgICAgICAgKGV4dTJjc3Jfd19jbWQgICAgICAgICAgICksCisgICAgLmV4dTJjc3Jfd19kYXRhX28gICAgICAgICAgICAgICAoZXh1MmNzcl93X2RhdGEgICAgICAgICAgKSwKKyAgICAuY3NyMmV4dV9yd19leGNfaSAgICAgICAgICAgICAgIChjc3IyZXh1X3J3X2V4YyAgICAgICAgICApLAorCisgICAgLy8gRVhVIDwtPiBDU1IgZXZlbnQgaW50ZXJmYWNlCisgICAgLmV4dTJjc3JfdGFrZV9pcnFfbyAgICAgICAgICAgICAoZXh1MmNzcl90YWtlX2lycSAgICAgICAgKSwKKyAgICAuZXh1MmNzcl90YWtlX2V4Y19vICAgICAgICAgICAgIChleHUyY3NyX3Rha2VfZXhjICAgICAgICApLAorICAgIC5leHUyY3NyX21yZXRfdXBkYXRlX28gICAgICAgICAgKGV4dTJjc3JfbXJldF91cGRhdGUgICAgICksCisgICAgLmV4dTJjc3JfbXJldF9pbnN0cl9vICAgICAgICAgICAoZXh1MmNzcl9tcmV0X2luc3RyICAgICAgKSwKKyAgICAuZXh1MmNzcl9leGNfY29kZV9vICAgICAgICAgICAgIChleHUyY3NyX2V4Y19jb2RlICAgICAgICApLAorICAgIC5leHUyY3NyX3RyYXBfdmFsX28gICAgICAgICAgICAgKGV4dTJjc3JfdHJhcF92YWwgICAgICAgICksCisgICAgLmNzcjJleHVfbmV3X3BjX2kgICAgICAgICAgICAgICAoY3NyMmV4dV9uZXdfcGMgICAgICAgICAgKSwKKyAgICAuY3NyMmV4dV9pcnFfaSAgICAgICAgICAgICAgICAgIChjc3IyZXh1X2lycSAgICAgICAgICAgICApLAorICAgIC5jc3IyZXh1X2lwX2llX2kgICAgICAgICAgICAgICAgKGNzcjJleHVfaXBfaWUgICAgICAgICAgICksCisgICAgLmNzcjJleHVfbXN0YXR1c19taWVfdXBfaSAgICAgICAoY3NyMmV4dV9tc3RhdHVzX21pZV91cCAgKSwKKworICAgIC8vIEVYVSA8LT4gRE1FTSBpbnRlcmZhY2UKKyAgICAuZXh1MmRtZW1fcmVxX28gICAgICAgICAgICAgICAgIChwaXBlMmRtZW1fcmVxX28gICAgICAgICApLAorICAgIC5leHUyZG1lbV9jbWRfbyAgICAgICAgICAgICAgICAgKHBpcGUyZG1lbV9jbWRfbyAgICAgICAgICksCisgICAgLmV4dTJkbWVtX3dpZHRoX28gICAgICAgICAgICAgICAocGlwZTJkbWVtX3dpZHRoX28gICAgICAgKSwKKyAgICAuZXh1MmRtZW1fYWRkcl9vICAgICAgICAgICAgICAgIChwaXBlMmRtZW1fYWRkcl9vICAgICAgICApLAorICAgIC5leHUyZG1lbV93ZGF0YV9vICAgICAgICAgICAgICAgKHBpcGUyZG1lbV93ZGF0YV9vICAgICAgICksCisgICAgLmRtZW0yZXh1X3JlcV9hY2tfaSAgICAgICAgICAgICAoZG1lbTJwaXBlX3JlcV9hY2tfaSAgICAgKSwKKyAgICAuZG1lbTJleHVfcmRhdGFfaSAgICAgICAgICAgICAgIChkbWVtMnBpcGVfcmRhdGFfaSAgICAgICApLAorICAgIC5kbWVtMmV4dV9yZXNwX2kgICAgICAgICAgICAgICAgKGRtZW0ycGlwZV9yZXNwX2kgICAgICAgICksCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIC8vIEVYVSA8LT4gSERVIGludGVyZmFjZQorICAgIC5oZHUyZXh1X25vX2NvbW1pdF9pICAgICAgICAgICAgKGV4dV9ub19jb21taXQgICAgICAgICAgICksCisgICAgLmhkdTJleHVfaXJxX2RzYmxfaSAgICAgICAgICAgICAoZXh1X2lycV9kc2JsICAgICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9wY19hZHZtdF9kc2JsX2kgICAgICAgIChleHVfcGNfYWR2bXRfZHNibCAgICAgICApLAorICAgIC5oZHUyZXh1X2Rtb2RlX3NzdGVwX2VuX2kgICAgICAgKGV4dV9kbW9kZV9zc3RlcF9lbiAgICAgICksCisgICAgLmhkdTJleHVfcGJ1Zl9mZXRjaF9pICAgICAgICAgICAoZmV0Y2hfcGJ1ZiAgICAgICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9kYmdfaGFsdGVkX2kgICAgICAgICAgIChkYmdfaGFsdGVkICAgICAgICAgICAgICApLAorICAgIC5oZHUyZXh1X2RiZ19ydW4yaGFsdF9pICAgICAgICAgKGRiZ19ydW4yaGFsdCAgICAgICAgICAgICksCisgICAgLmhkdTJleHVfZGJnX2hhbHQycnVuX2kgICAgICAgICAoZGJnX2hhbHQycnVuICAgICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X2kgICAgICAgIChkYmdfcnVuX3N0YXJ0ICAgICAgICAgICApLAorICAgIC5oZHUyZXh1X2RiZ19uZXdfcGNfaSAgICAgICAgICAgKGRiZ19uZXdfcGMgICAgICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGlmZGVmIFNDUjFfVERVX0VOCisgICAgLy8gRVhVIDwtPiBURFUgaW50ZXJmYWNlCisgICAgLmV4dTJ0ZHVfaW1vbl9vICAgICAgICAgICAgICAgICAoZXh1MnRkdV9pX21vbiAgICAgICAgICAgKSwKKyAgICAudGR1MmV4dV9pYnJrcHRfbWF0Y2hfaSAgICAgICAgICh0ZHUyZXh1X2lfbWF0Y2ggICAgICAgICApLAorICAgIC50ZHUyZXh1X2licmtwdF9leGNfcmVxX2kgICAgICAgKHRkdTJleHVfaV94X3JlcSAgICAgICAgICksCisgICAgLmxzdTJ0ZHVfZG1vbl9vICAgICAgICAgICAgICAgICAobHN1MnRkdV9kX21vbiAgICAgICAgICAgKSwKKyAgICAudGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9pICAgICAgICh0ZHUybHN1X2lfeF9yZXEgICAgICAgICApLAorICAgIC50ZHUybHN1X2RicmtwdF9tYXRjaF9pICAgICAgICAgKHRkdTJsc3VfZF9tYXRjaCAgICAgICAgICksCisgICAgLnRkdTJsc3VfZGJya3B0X2V4Y19yZXFfaSAgICAgICAodGR1MmxzdV9kX3hfcmVxICAgICAgICAgKSwKKyAgICAuZXh1MnRkdV9pYnJrcHRfcmV0X28gICAgICAgICAgIChleHUydGR1X2JwX3JldGlyZSAgICAgICApLAorICAgIC5leHUyaGR1X2licmtwdF9od19vICAgICAgICAgICAgKGJya3B0X2h3ICAgICAgICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworICAgIC8vIEVYVSBjb250cm9sCisgICAgLmV4dTJwaXBlX2V4Y19yZXFfbyAgICAgICAgICAgICAoZXh1X2V4Y19yZXEgICAgICAgICAgICAgKSwKKyAgICAuZXh1MnBpcGVfYnJrcHRfbyAgICAgICAgICAgICAgIChicmtwdCAgICAgICAgICAgICAgICAgICApLAorICAgIC5leHUycGlwZV9pbml0X3BjX28gICAgICAgICAgICAgKGV4dV9pbml0X3BjICAgICAgICAgICAgICksCisgICAgLmV4dTJwaXBlX3dmaV9ydW4yaGFsdF9vICAgICAgICAod2ZpX3J1bjJoYWx0ICAgICAgICAgICAgKSwKKyAgICAuZXh1MnBpcGVfaW5zdHJldF9vICAgICAgICAgICAgIChpbnN0cmV0ICAgICAgICAgICAgICAgICApLAorICAgIC5leHUyY3NyX2luc3RyZXRfbm9fZXhjX28gICAgICAgKGluc3RyZXRfbmV4YyAgICAgICAgICAgICksCisgICAgLmV4dTJwaXBlX2V4dV9idXN5X28gICAgICAgICAgICAoZXh1X2J1c3kgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIFBDIGludGVyZmFjZQorYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIC5leHUycGlwZV93ZmlfaGFsdGVkX28gICAgICAgICAgKHdmaV9oYWx0ZWQgICAgICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisgICAgLmV4dTJwaXBlX3BjX2N1cnJfbyAgICAgICAgICAgICAoY3Vycl9wYyAgICAgICAgICAgICAgICAgKSwKKyAgICAuZXh1MmNzcl9wY19uZXh0X28gICAgICAgICAgICAgIChuZXh0X3BjICAgICAgICAgICAgICAgICApLAorICAgIC5leHUyaWZ1X3BjX25ld19yZXFfbyAgICAgICAgICAgKG5ld19wY19yZXEgICAgICAgICAgICAgICksCisgICAgLmV4dTJpZnVfcGNfbmV3X28gICAgICAgICAgICAgICAobmV3X3BjICAgICAgICAgICAgICAgICAgKQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNdWx0aS1wb3J0IHJlZ2lzdGVyIGZpbGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9waXBlX21wcmYgaV9waXBlX21wcmYgKAorYGlmZGVmIFNDUjFfTVBSRl9SU1RfRU4KKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfTVBSRl9SU1RfRU4KKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICApLAorCisgICAgLy8gRVhVIDwtPiBNUFJGIGludGVyZmFjZQorICAgIC5leHUybXByZl9yczFfYWRkcl9pICAgIChleHUybXByZl9yczFfYWRkciksCisgICAgLm1wcmYyZXh1X3JzMV9kYXRhX28gICAgKG1wcmYyZXh1X3JzMV9kYXRhKSwKKyAgICAuZXh1Mm1wcmZfcnMyX2FkZHJfaSAgICAoZXh1Mm1wcmZfcnMyX2FkZHIpLAorICAgIC5tcHJmMmV4dV9yczJfZGF0YV9vICAgIChtcHJmMmV4dV9yczJfZGF0YSksCisgICAgLmV4dTJtcHJmX3dfcmVxX2kgICAgICAgKGV4dTJtcHJmX3dfcmVxICAgKSwKKyAgICAuZXh1Mm1wcmZfcmRfYWRkcl9pICAgICAoZXh1Mm1wcmZfcmRfYWRkciApLAorICAgIC5leHUybXByZl9yZF9kYXRhX2kgICAgIChleHUybXByZl9yZF9kYXRhICkKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3BpcGVfY3NyIGlfcGlwZV9jc3IgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAocGlwZV9yc3RfbiAgICAgICAgICAgICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICksCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisgICAgLmNsa19hbHdfb24gICAgICAgICAgICAgICAgIChjbGtjdGwycGlwZV9jbGtfYWx3X29uX2kpLAorYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorCisgICAgLy8gRVhVIDwtPiBDU1IgcmVhZC93cml0ZSBpbnRlcmZhY2UKKyAgICAuZXh1MmNzcl9yX3JlcV9pICAgICAgICAgICAgKGV4dTJjc3Jfcl9yZXEgICAgICAgICAgICksCisgICAgLmV4dTJjc3JfcndfYWRkcl9pICAgICAgICAgIChleHUyY3NyX3J3X2FkZHIgICAgICAgICApLAorICAgIC5jc3IyZXh1X3JfZGF0YV9vICAgICAgICAgICAoY3NyMmV4dV9yX2RhdGEgICAgICAgICAgKSwKKyAgICAuZXh1MmNzcl93X3JlcV9pICAgICAgICAgICAgKGV4dTJjc3Jfd19yZXEgICAgICAgICAgICksCisgICAgLmV4dTJjc3Jfd19jbWRfaSAgICAgICAgICAgIChleHUyY3NyX3dfY21kICAgICAgICAgICApLAorICAgIC5leHUyY3NyX3dfZGF0YV9pICAgICAgICAgICAoZXh1MmNzcl93X2RhdGEgICAgICAgICAgKSwKKyAgICAuY3NyMmV4dV9yd19leGNfbyAgICAgICAgICAgKGNzcjJleHVfcndfZXhjICAgICAgICAgICksCisKKyAgICAvLyBFWFUgPC0+IENTUiBldmVudCBpbnRlcmZhY2UKKyAgICAuZXh1MmNzcl90YWtlX2lycV9pICAgICAgICAgKGV4dTJjc3JfdGFrZV9pcnEgICAgICAgICksCisgICAgLmV4dTJjc3JfdGFrZV9leGNfaSAgICAgICAgIChleHUyY3NyX3Rha2VfZXhjICAgICAgICApLAorICAgIC5leHUyY3NyX21yZXRfdXBkYXRlX2kgICAgICAoZXh1MmNzcl9tcmV0X3VwZGF0ZSAgICAgKSwKKyAgICAuZXh1MmNzcl9tcmV0X2luc3RyX2kgICAgICAgKGV4dTJjc3JfbXJldF9pbnN0ciAgICAgICksCisgICAgLmV4dTJjc3JfZXhjX2NvZGVfaSAgICAgICAgIChleHUyY3NyX2V4Y19jb2RlICAgICAgICApLAorICAgIC5leHUyY3NyX3RyYXBfdmFsX2kgICAgICAgICAoZXh1MmNzcl90cmFwX3ZhbCAgICAgICAgKSwKKyAgICAuY3NyMmV4dV9uZXdfcGNfbyAgICAgICAgICAgKGNzcjJleHVfbmV3X3BjICAgICAgICAgICksCisgICAgLmNzcjJleHVfaXJxX28gICAgICAgICAgICAgIChjc3IyZXh1X2lycSAgICAgICAgICAgICApLAorICAgIC5jc3IyZXh1X2lwX2llX28gICAgICAgICAgICAoY3NyMmV4dV9pcF9pZSAgICAgICAgICAgKSwKKyAgICAuY3NyMmV4dV9tc3RhdHVzX21pZV91cF9vICAgKGNzcjJleHVfbXN0YXR1c19taWVfdXAgICksCisKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KKyAgICAvLyBDU1IgPC0+IElQSUMgaW50ZXJmYWNlCisgICAgLmNzcjJpcGljX3JfcmVxX28gICAgICAgICAgIChjc3IyaXBpY19yX3JlcSAgICAgICAgICApLAorICAgIC5jc3IyaXBpY193X3JlcV9vICAgICAgICAgICAoY3NyMmlwaWNfd19yZXEgICAgICAgICAgKSwKKyAgICAuY3NyMmlwaWNfYWRkcl9vICAgICAgICAgICAgKGNzcjJpcGljX2FkZHIgICAgICAgICAgICksCisgICAgLmNzcjJpcGljX3dkYXRhX28gICAgICAgICAgIChjc3IyaXBpY193ZGF0YSAgICAgICAgICApLAorICAgIC5pcGljMmNzcl9yZGF0YV9pICAgICAgICAgICAoaXBpYzJjc3JfcmRhdGEgICAgICAgICAgKSwKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KKworICAgIC8vIENTUiA8LT4gUEMgaW50ZXJmYWNlCisgICAgLmV4dTJjc3JfcGNfY3Vycl9pICAgICAgICAgIChjdXJyX3BjICAgICAgICAgICAgICAgICApLAorICAgIC5leHUyY3NyX3BjX25leHRfaSAgICAgICAgICAobmV4dF9wYyAgICAgICAgICAgICAgICAgKSwKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKKyAgICAuZXh1MmNzcl9pbnN0cmV0X25vX2V4Y19pICAgKGluc3RyZXRfbmV4YyAgICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9DU1JfUkVEVUNFRF9DTlQKKworICAgIC8vIElSUQorYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgIC5zb2MyY3NyX2lycV9leHRfaSAgICAgICAgICAoaXBpYzJjc3JfaXJxICAgICAgICAgICAgKSwKK2BlbHNlIC8vIFNDUjFfSVBJQ19FTgorICAgIC5zb2MyY3NyX2lycV9leHRfaSAgICAgICAgICAoc29jMnBpcGVfaXJxX2V4dF9pICAgICAgKSwKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KKyAgICAuc29jMmNzcl9pcnFfc29mdF9pICAgICAgICAgKHNvYzJwaXBlX2lycV9zb2Z0X2kgICAgICksCisgICAgLnNvYzJjc3JfaXJxX210aW1lcl9pICAgICAgIChzb2MycGlwZV9pcnFfbXRpbWVyX2kgICApLAorCisgICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgorICAgIC5zb2MyY3NyX210aW1lcl92YWxfaSAgICAgICAoc29jMnBpcGVfbXRpbWVyX3ZhbF9pICAgKSwKKworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLy8gQ1NSIDwtPiBIRFUgaW50ZXJmYWNlCisgICAgLmNzcjJoZHVfcmVxX28gICAgICAgICAgICAgIChjc3IyaGR1X3JlcSAgICAgICAgICAgICApLAorICAgIC5jc3IyaGR1X2NtZF9vICAgICAgICAgICAgICAoY3NyMmhkdV9jbWQgICAgICAgICAgICAgKSwKKyAgICAuY3NyMmhkdV9hZGRyX28gICAgICAgICAgICAgKGNzcjJoZHVfYWRkciAgICAgICAgICAgICksCisgICAgLmNzcjJoZHVfd2RhdGFfbyAgICAgICAgICAgIChjc3IyaGR1X3dkYXRhICAgICAgICAgICApLAorICAgIC5oZHUyY3NyX3JkYXRhX2kgICAgICAgICAgICAoaGR1MmNzcl9yZGF0YSAgICAgICAgICAgKSwKKyAgICAuaGR1MmNzcl9yZXNwX2kgICAgICAgICAgICAgKGhkdTJjc3JfcmVzcCAgICAgICAgICAgICksCisgICAgLmhkdTJjc3Jfbm9fY29tbWl0X2kgICAgICAgIChleHVfbm9fY29tbWl0ICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorICAgIC8vIENTUiA8LT4gVERVIGludGVyZmFjZQorICAgIC5jc3IydGR1X3JlcV9vICAgICAgICAgICAgICAoY3NyMnRkdV9yZXEgICAgICAgICAgICAgKSwKKyAgICAuY3NyMnRkdV9jbWRfbyAgICAgICAgICAgICAgKGNzcjJ0ZHVfY21kICAgICAgICAgICAgICksCisgICAgLmNzcjJ0ZHVfYWRkcl9vICAgICAgICAgICAgIChjc3IydGR1X2FkZHIgICAgICAgICAgICApLAorICAgIC5jc3IydGR1X3dkYXRhX28gICAgICAgICAgICAoY3NyMnRkdV93ZGF0YSAgICAgICAgICAgKSwKKyAgICAudGR1MmNzcl9yZGF0YV9pICAgICAgICAgICAgKHRkdTJjc3JfcmRhdGEgICAgICAgICAgICksCisgICAgLnRkdTJjc3JfcmVzcF9pICAgICAgICAgICAgICh0ZHUyY3NyX3Jlc3AgICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisgICAgLnNvYzJjc3JfZnVzZV9taGFydGlkX2kgICAgIChzb2MycGlwZV9mdXNlX21oYXJ0aWRfaSApCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVncmF0ZWQgcHJvZ3JhbW1hYmxlIGludGVycnVwdCBjb250cm9sbGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX0lQSUNfRU4KK3NjcjFfaXBpYyBpX3BpcGVfaXBpYyAoCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICAgICAgICksCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisgICAgLmNsayAgICAgICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19hbHdfb25faSksCitgZWxzZSAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgKSwKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKyAgICAuc29jMmlwaWNfaXJxX2xpbmVzX2kgICAoc29jMnBpcGVfaXJxX2xpbmVzX2kgICAgKSwKKyAgICAuY3NyMmlwaWNfcl9yZXFfaSAgICAgICAoY3NyMmlwaWNfcl9yZXEgICAgICAgICAgKSwKKyAgICAuY3NyMmlwaWNfd19yZXFfaSAgICAgICAoY3NyMmlwaWNfd19yZXEgICAgICAgICAgKSwKKyAgICAuY3NyMmlwaWNfYWRkcl9pICAgICAgICAoY3NyMmlwaWNfYWRkciAgICAgICAgICAgKSwKKyAgICAuY3NyMmlwaWNfd2RhdGFfaSAgICAgICAoY3NyMmlwaWNfd2RhdGEgICAgICAgICAgKSwKKyAgICAuaXBpYzJjc3JfcmRhdGFfbyAgICAgICAoaXBpYzJjc3JfcmRhdGEgICAgICAgICAgKSwKKyAgICAuaXBpYzJjc3JfaXJxX21fcmVxX28gICAoaXBpYzJjc3JfaXJxICAgICAgICAgICAgKQorKTsKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCcmVha3BvaW50IG1vZHVsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgaWZkZWYgU0NSMV9URFVfRU4KK3NjcjFfcGlwZV90ZHUgaV9waXBlX3RkdSAoCisgICAgLy8gQ29tbW9uIHNpZ25hbHMKKyBgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKGRiZ19yc3RfbiAgICAgICAgICAgICApLAorIGBlbHNlCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICAgKSwKKyBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAorICAgIC5jbGtfZW4gICAgICAgICAgICAgICAgICAgICAoMSdiMSAgICAgICAgICAgICAgICAgICksCisgYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLnRkdV9kc2JsX2kgICAgICAgICAgICAgICAgIChod2Jya19kc2JsICAgICAgICAgICAgKSwKKyBgZWxzZSAvLyBTQ1IxX0RCR19FTgorICAgIC50ZHVfZHNibF9pICAgICAgICAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICksCisgYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBURFUgPC0+IENTUiBpbnRlcmZhY2UKKyBgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAuY3NyMnRkdV9yZXFfaSAgICAgICAgICAgICAgKGNzcjJ0ZHVfcmVxX3FsZnkgICAgICApLAorICAgIC5jc3IydGR1X2NtZF9pICAgICAgICAgICAgICAoY3NyMnRkdV9jbWQgICAgICAgICAgICksCisgICAgLmNzcjJ0ZHVfYWRkcl9pICAgICAgICAgICAgIChjc3IydGR1X2FkZHIgICAgICAgICAgKSwKKyAgICAuY3NyMnRkdV93ZGF0YV9pICAgICAgICAgICAgKGNzcjJ0ZHVfd2RhdGEgICAgICAgICApLAorIGBlbHNlIC8vIFNDUjFfREJHX0VOCisgICAgLmNzcjJ0ZHVfcmVxX2kgICAgICAgICAgICAgIChjc3IydGR1X3JlcSAgICAgICAgICAgKSwKKyAgICAuY3NyMnRkdV9jbWRfaSAgICAgICAgICAgICAgKGNzcjJ0ZHVfY21kICAgICAgICAgICApLAorICAgIC5jc3IydGR1X2FkZHJfaSAgICAgICAgICAgICAoY3NyMnRkdV9hZGRyICAgICAgICAgICksCisgICAgLmNzcjJ0ZHVfd2RhdGFfaSAgICAgICAgICAgIChjc3IydGR1X3dkYXRhICAgICAgICAgKSwKKyBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAudGR1MmNzcl9yZGF0YV9vICAgICAgICAgICAgKHRkdTJjc3JfcmRhdGEgICAgICAgICApLAorICAgIC50ZHUyY3NyX3Jlc3BfbyAgICAgICAgICAgICAodGR1MmNzcl9yZXNwICAgICAgICAgICksCisKKyAgICAvLyBURFUgPC0+IEVYVSBpbnRlcmZhY2UKKyBgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAuZXh1MnRkdV9pbW9uX2kgICAgICAgICAgICAgKGV4dTJ0ZHVfaV9tb25fcWxmeSAgICApLAorIGBlbHNlIC8vIFNDUjFfREJHX0VOCisgICAgLmV4dTJ0ZHVfaW1vbl9pICAgICAgICAgICAgIChleHUydGR1X2lfbW9uICAgICAgICAgKSwKKyBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKyAgICAudGR1MmV4dV9pYnJrcHRfbWF0Y2hfbyAgICAgKHRkdTJleHVfaV9tYXRjaCAgICAgICApLAorICAgIC50ZHUyZXh1X2licmtwdF9leGNfcmVxX28gICAodGR1MmV4dV9pX3hfcmVxICAgICAgICksCisgYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLmV4dTJ0ZHVfYnBfcmV0aXJlX2kgICAgICAgIChleHUydGR1X2JwX3JldGlyZV9xbGZ5KSwKKyBgZWxzZSAvLyBTQ1IxX0RCR19FTgorICAgIC5leHUydGR1X2JwX3JldGlyZV9pICAgICAgICAoZXh1MnRkdV9icF9yZXRpcmUgICAgICksCisgYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBURFUgPC0+IExTVSBpbnRlcmZhY2UKKyAgICAudGR1MmxzdV9pYnJrcHRfZXhjX3JlcV9vICAgKHRkdTJsc3VfaV94X3JlcSAgICAgICApLAorIGBpZmRlZiBTQ1IxX0RCR19FTgorICAgIC5sc3UydGR1X2Rtb25faSAgICAgICAgICAgICAobHN1MnRkdV9kX21vbl9xbGZ5ICAgICksCisgYGVsc2UgLy8gU0NSMV9EQkdfRU4KKyAgICAubHN1MnRkdV9kbW9uX2kgICAgICAgICAgICAgKGxzdTJ0ZHVfZF9tb24gICAgICAgICApLAorIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgorICAgIC50ZHUybHN1X2RicmtwdF9tYXRjaF9vICAgICAodGR1MmxzdV9kX21hdGNoICAgICAgICksCisgICAgLnRkdTJsc3VfZGJya3B0X2V4Y19yZXFfbyAgICh0ZHUybHN1X2RfeF9yZXEgICAgICAgKSwKKyAgICAvLyBFUFUgSS9GCisgYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLnRkdTJoZHVfZG1vZGVfcmVxX28gICAgICAgICh0ZHUyaGR1X2Rtb2RlX3JlcSAgICAgKQorIGBlbHNlIC8vIFNDUjFfREJHX0VOCisgICAgLnRkdTJoZHVfZG1vZGVfcmVxX28gICAgICAgICggICAgICAgICAgICAgICAgICAgICAgKQorIGBlbmRpZiAvLyBTQ1IxX0RCR19FTgorKTsKKworIGBpZmRlZiBTQ1IxX0RCR19FTgorYXNzaWduIGh3YnJrX2RzYmwgICAgICAgICAgICAgICA9ICh+ZGJnX2VuKSB8IGhkdV9od2Jya19kc2JsOworLy8KK2Fzc2lnbiBjc3IydGR1X3JlcV9xbGZ5ICAgICAgICAgPSBkYmdfZW4gJiBjc3IydGR1X3JlcSAmIHBpcGUyaGR1X3JkY19xbGZ5X2k7CisvLworYXNzaWduIGV4dTJ0ZHVfaV9tb25fcWxmeS52ZCAgICA9IGV4dTJ0ZHVfaV9tb24udmQgJiBwaXBlMmhkdV9yZGNfcWxmeV9pOworYXNzaWduIGV4dTJ0ZHVfaV9tb25fcWxmeS5yZXEgICA9IGV4dTJ0ZHVfaV9tb24ucmVxOworYXNzaWduIGV4dTJ0ZHVfaV9tb25fcWxmeS5hZGRyICA9IGV4dTJ0ZHVfaV9tb24uYWRkcjsKK2Fzc2lnbiBsc3UydGR1X2RfbW9uX3FsZnkudmQgICAgPSBsc3UydGR1X2RfbW9uLnZkICYgcGlwZTJoZHVfcmRjX3FsZnlfaTsKK2Fzc2lnbiBsc3UydGR1X2RfbW9uX3FsZnkubG9hZCAgPSBsc3UydGR1X2RfbW9uLmxvYWQ7Cithc3NpZ24gbHN1MnRkdV9kX21vbl9xbGZ5LnN0b3JlID0gbHN1MnRkdV9kX21vbi5zdG9yZTsKK2Fzc2lnbiBsc3UydGR1X2RfbW9uX3FsZnkuYWRkciAgPSBsc3UydGR1X2RfbW9uLmFkZHI7Cithc3NpZ24gZXh1MnRkdV9icF9yZXRpcmVfcWxmeSAgID0gZXh1MnRkdV9icF9yZXRpcmUgJiB7JGJpdHMoZXh1MnRkdV9icF9yZXRpcmUpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKKyBgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSEFSVCBEZWJ1ZyBVbml0IChIRFUpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX0RCR19FTgorc2NyMV9waXBlX2hkdSBpX3BpcGVfaGR1ICgKKyAgICAvLyBDb21tb24gc2lnbmFscworICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAoZGJnX3JzdF9uICAgICAgICAgICAgICksCisgICAgLmNsa19lbiAgICAgICAgICAgICAgICAgICAgIChkbTJwaXBlX2FjdGl2ZV9pICAgICAgKSwKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KKyAgICAuY2xrX3BpcGVfZW4gICAgICAgICAgICAgICAgKGNsa2N0bDJwaXBlX2Nsa19lbl9pICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrY3RsMnBpcGVfY2xrX2RiZ2NfaSksCitgZWxzZQorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKKyAgICAvLyBDb250cm9sL3N0YXR1cyByZWdpc3RlcnMgaS9mCisgICAgLmNzcjJoZHVfcmVxX2kgICAgICAgICAgICAgIChjc3IyaGR1X3JlcV9xbGZ5ICAgICAgKSwKKyAgICAuY3NyMmhkdV9jbWRfaSAgICAgICAgICAgICAgKGNzcjJoZHVfY21kICAgICAgICAgICApLAorICAgIC5jc3IyaGR1X2FkZHJfaSAgICAgICAgICAgICAoY3NyMmhkdV9hZGRyICAgICAgICAgICksCisgICAgLmNzcjJoZHVfd2RhdGFfaSAgICAgICAgICAgIChjc3IyaGR1X3dkYXRhICAgICAgICAgKSwKKyAgICAuaGR1MmNzcl9yZXNwX28gICAgICAgICAgICAgKGhkdTJjc3JfcmVzcCAgICAgICAgICApLAorICAgIC5oZHUyY3NyX3JkYXRhX28gICAgICAgICAgICAoaGR1MmNzcl9yZGF0YSAgICAgICAgICksCisKKyAgICAvLyBIQVJUIFJ1biBDb250cm9sIGkvZgorICAgIC5waXBlMmhkdV9yZGNfcWxmeV9pICAgICAgICAocGlwZTJoZHVfcmRjX3FsZnlfaSAgICksCisgICAgLmRtMmhkdV9jbWRfcmVxX2kgICAgICAgICAgIChkbTJwaXBlX2NtZF9yZXFfaSAgICAgKSwKKyAgICAuZG0yaGR1X2NtZF9pICAgICAgICAgICAgICAgKGRtMnBpcGVfY21kX2kgICAgICAgICApLAorICAgIC5oZHUyZG1fY21kX3Jlc3BfbyAgICAgICAgICAocGlwZTJkbV9jbWRfcmVzcF9vICAgICksCisgICAgLmhkdTJkbV9jbWRfcmNvZGVfbyAgICAgICAgIChwaXBlMmRtX2NtZF9yY29kZV9vICAgKSwKKyAgICAuaGR1MmRtX2hhcnRfZXZlbnRfbyAgICAgICAgKHBpcGUyZG1faGFydF9ldmVudF9vICApLAorICAgIC5oZHUyZG1faGFydF9zdGF0dXNfbyAgICAgICAocGlwZTJkbV9oYXJ0X3N0YXR1c19vICksCisKKyAgICAvLyBQcm9ncmFtIEJ1ZmZlciAtIEhBUlQgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGkvZgorICAgIC5oZHUyZG1fcGJ1Zl9hZGRyX28gICAgICAgICAocGlwZTJkbV9wYnVmX2FkZHJfbyAgICksCisgICAgLmRtMmhkdV9wYnVmX2luc3RyX2kgICAgICAgIChkbTJwaXBlX3BidWZfaW5zdHJfaSAgKSwKKworICAgIC8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgorICAgIC5oZHUyZG1fZHJlZ19yZXFfbyAgICAgICAgICAocGlwZTJkbV9kcmVnX3JlcV9vICAgICksCisgICAgLmhkdTJkbV9kcmVnX3dyX28gICAgICAgICAgIChwaXBlMmRtX2RyZWdfd3JfbyAgICAgKSwKKyAgICAuaGR1MmRtX2RyZWdfd2RhdGFfbyAgICAgICAgKHBpcGUyZG1fZHJlZ193ZGF0YV9vICApLAorICAgIC5kbTJoZHVfZHJlZ19yZXNwX2kgICAgICAgICAoZG0ycGlwZV9kcmVnX3Jlc3BfaSAgICksCisgICAgLmRtMmhkdV9kcmVnX2ZhaWxfaSAgICAgICAgIChkbTJwaXBlX2RyZWdfZmFpbF9pICAgKSwKKyAgICAuZG0yaGR1X2RyZWdfcmRhdGFfaSAgICAgICAgKGRtMnBpcGVfZHJlZ19yZGF0YV9pICApLAorICAgIC8vCitgaWZkZWYgU0NSMV9URFVfRU4KKyAgICAvLyBIRFUgPC0+IFREVSBpbnRlcmZhY2UKKyAgICAuaGR1MnRkdV9od2Jya19kc2JsX28gICAgICAgKGhkdV9od2Jya19kc2JsICAgICAgICApLAorICAgIC50ZHUyaGR1X2Rtb2RlX3JlcV9pICAgICAgICAodGR1MmhkdV9kbW9kZV9yZXEgICAgICksCisgICAgLmV4dTJoZHVfaWJya3B0X2h3X2kgICAgICAgIChicmtwdF9odyAgICAgICAgICAgICAgKSwKK2BlbmRpZiAvLyBTQ1IxX1REVV9FTgorCisgICAgLy8gSEFSVCBSdW4gU3RhdHVzCisgICAgLnBpcGUyaGR1X2V4dV9idXN5X2kgICAgICAgIChleHVfYnVzeV9xbGZ5ICAgICAgICAgKSwKKyAgICAucGlwZTJoZHVfaW5zdHJldF9pICAgICAgICAgKGluc3RyZXRfcWxmeSAgICAgICAgICApLAorICAgIC5waXBlMmhkdV9pbml0X3BjX2kgICAgICAgICAoZXh1X2luaXRfcGNfcWxmeSAgICAgICksCisKKyAgICAvLyBIQVJUIEhhbHQgU3RhdHVzCisgICAgLnBpcGUyaGR1X2V4dV9leGNfcmVxX2kgICAgIChleHVfZXhjX3JlcV9xbGZ5ICAgICAgKSwKKyAgICAucGlwZTJoZHVfYnJrcHRfaSAgICAgICAgICAgKGJya3B0X3FsZnkgICAgICAgICAgICApLAorCisgICAgLy8gSEFSVCBSdW4gQ29udHJvbAorICAgIC5oZHUyZXh1X3BidWZfZmV0Y2hfbyAgICAgICAoZmV0Y2hfcGJ1ZiAgICAgICAgICAgICksCisgICAgLmhkdTJleHVfbm9fY29tbWl0X28gICAgICAgIChleHVfbm9fY29tbWl0ICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9pcnFfZHNibF9vICAgICAgICAgKGV4dV9pcnFfZHNibCAgICAgICAgICApLAorICAgIC5oZHUyZXh1X3BjX2Fkdm10X2RzYmxfbyAgICAoZXh1X3BjX2Fkdm10X2RzYmwgICAgICksCisgICAgLmhkdTJleHVfZG1vZGVfc3N0ZXBfZW5fbyAgIChleHVfZG1vZGVfc3N0ZXBfZW4gICAgKSwKKworICAgIC8vIEhBUlQgc3RhdGUKKyAgICAuaGR1MmV4dV9kYmdfaGFsdGVkX28gICAgICAgKGRiZ19oYWx0ZWQgICAgICAgICAgICApLAorICAgIC5oZHUyZXh1X2RiZ19ydW4yaGFsdF9vICAgICAoZGJnX3J1bjJoYWx0ICAgICAgICAgICksCisgICAgLmhkdTJleHVfZGJnX2hhbHQycnVuX28gICAgIChkYmdfaGFsdDJydW4gICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9kYmdfcnVuX3N0YXJ0X28gICAgKGRiZ19ydW5fc3RhcnQgICAgICAgICApLAorCisgICAgLy8gUEMgaW50ZXJmYWNlCisgICAgLnBpcGUyaGR1X3BjX2N1cnJfaSAgICAgICAgIChjdXJyX3BjICAgICAgICAgICAgICAgKSwKKyAgICAuaGR1MmV4dV9kYmdfbmV3X3BjX28gICAgICAgKGRiZ19uZXdfcGMgICAgICAgICAgICApLAorCisgICAgLy8gUHJncmFtIEJ1ZmZlciBJbnN0cnVjdGlvbiBpbnRlcmZhY2UKKyAgICAuaWZ1MmhkdV9wYnVmX2luc3RyX3JkeV9pICAgKGlmdTJoZHVfcGJ1Zl9yZHlfcWxmeSApLAorICAgIC5oZHUyaWZ1X3BidWZfaW5zdHJfdmRfbyAgICAoaGR1MmlmdV9wYnVmX3ZkICAgICAgICksCisgICAgLmhkdTJpZnVfcGJ1Zl9pbnN0cl9lcnJfbyAgIChoZHUyaWZ1X3BidWZfZXJyICAgICAgKSwKKyAgICAuaGR1MmlmdV9wYnVmX2luc3RyX28gICAgICAgKGhkdTJpZnVfcGJ1Zl9pbnN0ciAgICApCispOworCithc3NpZ24gY3NyMmhkdV9yZXFfcWxmeSAgICAgICAgID0gY3NyMmhkdV9yZXEgJiBkYmdfZW4gJiBwaXBlMmhkdV9yZGNfcWxmeV9pOworLy8KK2Fzc2lnbiBleHVfYnVzeV9xbGZ5ICAgICAgICAgICAgPSBleHVfYnVzeSAgICAgICAgICAmIHskYml0cyhleHVfYnVzeSl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OworYXNzaWduIGluc3RyZXRfcWxmeSAgICAgICAgICAgICA9IGluc3RyZXQgICAgICAgICAgICYgeyRiaXRzKGluc3RyZXQpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKK2Fzc2lnbiBleHVfaW5pdF9wY19xbGZ5ICAgICAgICAgPSBleHVfaW5pdF9wYyAgICAgICAmIHskYml0cyhleHVfaW5pdF9wYyl7cGlwZTJoZHVfcmRjX3FsZnlfaX19OworYXNzaWduIGV4dV9leGNfcmVxX3FsZnkgICAgICAgICA9IGV4dV9leGNfcmVxICAgICAgICYgeyRiaXRzKGV4dV9leGNfcmVxKXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07Cithc3NpZ24gYnJrcHRfcWxmeSAgICAgICAgICAgICAgID0gYnJrcHQgICAgICAgICAgICAgJiB7JGJpdHMoYnJrcHQpe3BpcGUyaGR1X3JkY19xbGZ5X2l9fTsKK2Fzc2lnbiBpZnUyaGR1X3BidWZfcmR5X3FsZnkgICAgPSBpZnUyaGR1X3BidWZfcmR5ICAmIHskYml0cyhpZnUyaGR1X3BidWZfcmR5KXtwaXBlMmhkdV9yZGNfcWxmeV9pfX07CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHJhY2Vsb2cKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzY3IxX3RyYWNlbG9nIGlfdHJhY2Vsb2cgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpcGVfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgLnNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAoc29jMnBpcGVfZnVzZV9taGFydGlkX2kgICAgICAgICAgICApLAorCisgICAgLy8gTVBSRgorICAgIC5tcHJmMnRyYWNlX2ludF9pICAgICAgICAgICAgICAgKGlfcGlwZV9tcHJmLm1wcmZfaW50ICAgICAgICAgICAgICAgKSwKKyAgICAubXByZjJ0cmFjZV93cl9lbl9pICAgICAgICAgICAgIChpX3BpcGVfbXByZi5leHUybXByZl93X3JlcV9pICAgICAgICksCisgICAgLm1wcmYydHJhY2Vfd3JfYWRkcl9pICAgICAgICAgICAoaV9waXBlX21wcmYuZXh1Mm1wcmZfcmRfYWRkcl9pICAgICApLAorICAgIC5tcHJmMnRyYWNlX3dyX2RhdGFfaSAgICAgICAgICAgKGlfcGlwZV9tcHJmLmV4dTJtcHJmX3JkX2RhdGFfaSAgICAgKSwKKworICAgIC8vIEVYVQorICAgIC5leHUydHJhY2VfdXBkYXRlX3BjX2VuX2kgICAgICAgKGlfcGlwZV9leHUudXBkYXRlX3BjX2VuICAgICAgICAgICAgKSwKKyAgICAuZXh1MnRyYWNlX3VwZGF0ZV9wY19pICAgICAgICAgIChpX3BpcGVfZXh1LnVwZGF0ZV9wYyAgICAgICAgICAgICAgICksCisKKyAgICAvLyBJRlUKKyAgICAuaWZ1MnRyYWNlX2luc3RyX2kgICAgICAgICAgICAgIChpX3BpcGVfaWZ1LmlmdTJpZHVfaW5zdHJfbyAgICAgICAgICksCisKKyAgICAvLyBDU1IKKyAgICAuY3NyMnRyYWNlX21zdGF0dXNfbWllX2kgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tc3RhdHVzX21pZV9mZiAgICAgICksCisgICAgLmNzcjJ0cmFjZV9tc3RhdHVzX21waWVfaSAgICAgICAoaV9waXBlX2Nzci5jc3JfbXN0YXR1c19tcGllX2ZmICAgICApLAorICAgIC5jc3IydHJhY2VfbXR2ZWNfYmFzZV9pICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX210dmVjX2Jhc2UgICAgICAgICAgKSwKKyAgICAuY3NyMnRyYWNlX210dmVjX21vZGVfaSAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tdHZlY19tb2RlICAgICAgICAgICksCisgICAgLmNzcjJ0cmFjZV9taWVfbWVpZV9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWllX21laWVfZmYgICAgICAgICApLAorICAgIC5jc3IydHJhY2VfbWllX210aWVfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pZV9tdGllX2ZmICAgICAgICAgKSwKKyAgICAuY3NyMnRyYWNlX21pZV9tc2llX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taWVfbXNpZV9mZiAgICAgICAgICksCisgICAgLmNzcjJ0cmFjZV9taXBfbWVpcF9pICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWlwX21laXAgICAgICAgICAgICApLAorICAgIC5jc3IydHJhY2VfbWlwX210aXBfaSAgICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21pcF9tdGlwICAgICAgICAgICAgKSwKKyAgICAuY3NyMnRyYWNlX21pcF9tc2lwX2kgICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9taXBfbXNpcCAgICAgICAgICAgICksCisgICAgLmNzcjJ0cmFjZV9tZXBjX2kgICAgICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbWVwY19mZiAgICAgICAgICAgICApLAorICAgIC5jc3IydHJhY2VfbWNhdXNlX2lycV9pICAgICAgICAgKGlfcGlwZV9jc3IuY3NyX21jYXVzZV9pX2ZmICAgICAgICAgKSwKKyAgICAuY3NyMnRyYWNlX21jYXVzZV9lY19pICAgICAgICAgIChpX3BpcGVfY3NyLmNzcl9tY2F1c2VfZWNfZmYgICAgICAgICksCisgICAgLmNzcjJ0cmFjZV9tdHZhbF9pICAgICAgICAgICAgICAoaV9waXBlX2Nzci5jc3JfbXR2YWxfZmYgICAgICAgICAgICApLAorICAgIC5jc3IydHJhY2VfbXN0YXR1c19taWVfdXBfaSAgICAgKGlfcGlwZV9jc3IuY3NyMmV4dV9tc3RhdHVzX21pZV91cF9vKSwKKworICAgIC8vIEV2ZW50cworICAgIC5jc3IydHJhY2VfZV9leGNfaSAgICAgICAgICAgICAgKGlfcGlwZV9jc3IuZV9leGMgICAgICAgICAgICAgICAgICAgKSwKKyAgICAuY3NyMnRyYWNlX2VfaXJxX2kgICAgICAgICAgICAgIChpX3BpcGVfY3NyLmVfaXJxICAgICAgICAgICAgICAgICAgICksCisgICAgLnBpcGUydHJhY2VfZV93YWtlX2kgICAgICAgICAgICAocGlwZTJjbGtjdGxfd2FrZV9yZXFfbyAgICAgICAgICAgICApLAorICAgIC5jc3IydHJhY2VfZV9tcmV0X2kgICAgICAgICAgICAgKGlfcGlwZV9jc3IuZV9tcmV0ICAgICAgICAgICAgICAgICAgKQorKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfcGlwZV90b3AKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfdHJhY2Vsb2cuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3RyYWNlbG9nLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODYwMDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3RyYWNlbG9nLnN2CkBAIC0wLDAgKzEsNDU1IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RyYWNlbG9nLnN2PgorLy8vIEBicmllZiAgICAgIENvcmUgdHJhY2Vsb2cgbW9kdWxlCisvLy8KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKK2BpbmNsdWRlICJzY3IxX2Nzci5zdmgiCisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCittb2R1bGUgc2NyMV90cmFjZWxvZyAoCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYWNlbG9nIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYWNlbG9nIGNsb2NrCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgIHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pLCAgICAgIC8vIEZ1c2UgTUhBUlRJRAorCisgICAgLy8gTVBSRgorYGlmZGVmICBTQ1IxX01QUkZfUkFNCisgICAgaW5wdXQgICBsb2dpYyAgIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICBtcHJmMnRyYWNlX2ludF9pICAgWzE6YFNDUjFfTVBSRl9TSVpFLTFdLCAvLyBNUFJGIHJlZ2lzdGVycyBjb250ZW50CitgZWxzZSAvLyBTQ1IxX01QUkZfUkFNCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbXByZl92IFsxOmBTQ1IxX01QUkZfU0laRS0xXSBtcHJmMnRyYWNlX2ludF9pLCAgICAgICAgICAgICAvLyBNUFJGIHJlZ2lzdGVycyBjb250ZW50CitgZW5kaWYgLy8gU0NSMV9NUFJGX1JBTQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcHJmMnRyYWNlX3dyX2VuX2ksICAgICAgICAgICAvLyBNUFJGIHdyaXRlIGVuYWJsZQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX01QUkZfQVdJRFRILTE6MF0gICAgICAgICBtcHJmMnRyYWNlX3dyX2FkZHJfaSwgICAgICAgICAvLyBNUFJGIHdyaXRlIGFkZHJlc3MKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgbXByZjJ0cmFjZV93cl9kYXRhX2ksICAgICAgICAgLy8gTVBSRiB3cml0ZSBkYXRhCisKKyAgICAvLyBFWFUKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh1MnRyYWNlX3VwZGF0ZV9wY19lbl9pLCAgICAgLy8gUEMgdXBkYXRlZCBmbGFnCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgIGV4dTJ0cmFjZV91cGRhdGVfcGNfaSwgICAgICAgIC8vIE5leHQgUEMgdmFsdWUKKworICAgIC8vIElGVQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICBpZnUydHJhY2VfaW5zdHJfaSwgICAgICAgICAgICAvLyBDdXJyZW50IGluc3RydWN0aW9uIGZyb20gSUZVIHN0YWdlCisKKyAgICAvLyBDU1IKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21zdGF0dXNfbWllX2ksICAgICAgLy8gQ1NSIE1TVEFUVVMubWllIGJpdAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXN0YXR1c19tcGllX2ksICAgICAvLyBDU1IgTVNUQVRVUy5tcGllIGJpdAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTo2XSAgICAgICAgICAgICAgICBjc3IydHJhY2VfbXR2ZWNfYmFzZV9pLCAgICAgICAvLyBDU1IgTVRWRUMuCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tdHZlY19tb2RlX2ksICAgICAgIC8vIENTUiBNVFZFQy4KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pZV9tZWllX2ksICAgICAgICAgLy8gQ1NSIE1JRS5tZWllIGJpdAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWllX210aWVfaSwgICAgICAgICAvLyBDU1IgTUlFLm10aWUgYml0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taWVfbXNpZV9pLCAgICAgICAgIC8vIENTUiBNSUUubXNpZSBiaXQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21pcF9tZWlwX2ksICAgICAgICAgLy8gQ1NSIE1JUC5tZWlwIGJpdAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWlwX210aXBfaSwgICAgICAgICAvLyBDU1IgTUlQLm10aXAgYml0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9taXBfbXNpcF9pLCAgICAgICAgIC8vIENTUiBNSVAubXNpcCBiaXQKKyBgaWZkZWYgU0NSMV9SVkNfRVhUCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjFdICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tZXBjX2ksICAgICAgICAgICAgIC8vIENTUiBNRVBDIHJlZ2lzdGVyCisgYGVsc2UgLy8gU0NSMV9SVkNfRVhUCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjJdICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tZXBjX2ksICAgICAgICAgICAgIC8vIENTUiBNRVBDIHJlZ2lzdGVyCisgYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfbWNhdXNlX2lycV9pLCAgICAgICAvLyBDU1IgTUNBVVNFLmludGVycnVwdCBiaXQKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9leGNfY29kZV9lICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX21jYXVzZV9lY19pLCAgICAgICAgLy8gQ1NSIE1DQVVTRS5leGNlcHRpb25fY29kZSBiaXQKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgY3NyMnRyYWNlX210dmFsX2ksICAgICAgICAgICAgLy8gQ1NSIE1UVkFMIHJlZ2lzdGVyCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9tc3RhdHVzX21pZV91cF9pLCAgIC8vIENTUiBNU1RBVFVTLm1pZSB1cGRhdGUgZmxhZworCisgICAgLy8gRXZlbnRzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcjJ0cmFjZV9lX2V4Y19pLCAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBldmVudAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3IydHJhY2VfZV9pcnFfaSwgICAgICAgICAgICAvLyBpbnRlcnJ1cHQgZXZlbnQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZTJ0cmFjZV9lX3dha2VfaSwgICAgICAgICAgLy8gcGlwZSB3YWtldXAgZXZlbnQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NyMnRyYWNlX2VfbXJldF9pICAgICAgICAgICAgLy8gTVJFVCBpbnN0cnVjdGlvbgorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wMF9aRVJPIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzAxX1JBICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDJfU1AgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wM19HUCAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA0X1RQICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDVfVDAgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wNl9UMSAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzA3X1QyICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMDhfUzAgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8wOV9TMSAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzEwX0EwICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTFfQTEgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xMl9BMiAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzEzX0EzICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMTRfQTQgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xNV9BNSAgIDsKK2BpZm5kZWYgU0NSMV9SVkVfRVhUCisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xNl9BNiAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzE3X0E3ICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMThfUzIgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8xOV9TMyAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzIwX1M0ICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjFfUzUgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yMl9TNiAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzIzX1M3ICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjRfUzggICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yNV9TOSAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI2X1MxMCAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMjdfUzExICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8yOF9UMyAgIDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgSU5UXzI5X1Q0ICAgOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICBJTlRfMzBfVDUgICA7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgIElOVF8zMV9UNiAgIDsKK2BlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKK30gdHlwZV9zY3IxX2lyZWdfbmFtZV9zOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG1zdGF0dXM7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbXR2ZWM7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgbWllOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG1pcDsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtZXBjOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gIG1jYXVzZTsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICBtdHZhbDsKK30gdHlwZV9zY3IxX2Nzcl90cmFjZV9zOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIFNpZ25hbCBEZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVfc2NyMV9pcmVnX25hbWVfcyAgICAgICAgICAgICAgIG1wcmZfaW50X2FsaWFzOworCitgaWZkZWYgU0NSMV9UUkFDRV9MT0dfRU4KKwordGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF90aW1lOworCisvLyBUcmFjZWxvZyBjb250cm9sIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX2ZsYWc7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV91cGRhdGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV91cGRhdGVfcjsKK2J5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU7CisKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIHRyYWNlX3BjOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgdHJhY2VfbnBjOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgdHJhY2VfaW5zdHI7CisKK3R5cGVfc2NyMV9jc3JfdHJhY2VfcyAgICAgICAgICAgICAgIGNzcl90cmFjZTE7CisKKy8vIEZpbGUgaGFuZGxlcnMKK2ludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX2ZoYW5kbGVyX2NvcmU7CisKKy8vIE1QUkYgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXByZl91cDsKK2xvZ2ljIFtgU0NSMV9NUFJGX0FXSURUSC0xOjBdICAgICAgIG1wcmZfYWRkcjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgIG1wcmZfd2RhdGE7CisKK3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnQ7CitzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWU7CisKK2BlbmRpZiAvLyBTQ1IxX1RSQUNFX0xPR19FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHRhc2tzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmIFNDUjFfVFJBQ0VfTE9HX0VOCisKK3Rhc2sgdHJhY2Vfd3JpdGVfY29tbW9uOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiUxNmQgICIsIGN1cnJlbnRfdGltZSk7CisgICAgLy8gJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIDAgICIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAlcyAgIiwgIGV2ZW50X3R5cGUpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiAlOHggICIsIHRyYWNlX3BjKTsKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgJTh4ICAiLCB0cmFjZV9pbnN0cik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiICU4eCAgIiwgdHJhY2VfbnBjKTsKK2VuZHRhc2sgLy8gdHJhY2Vfd3JpdGVfY29tbW9uCisKK3Rhc2sgdHJhY2Vfd3JpdGVfaW50X3dhbGlhczsKKyAgICBjYXNlIChtcHJmX2FkZHIpCisgICAgICAgIDAgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDBfemVybyAgIik7CisgICAgICAgIDEgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDFfcmEgICAgIik7CisgICAgICAgIDIgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDJfc3AgICAgIik7CisgICAgICAgIDMgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDNfZ3AgICAgIik7CisgICAgICAgIDQgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDRfdHAgICAgIik7CisgICAgICAgIDUgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDVfdDAgICAgIik7CisgICAgICAgIDYgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDZfdDEgICAgIik7CisgICAgICAgIDcgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDdfdDIgICAgIik7CisgICAgICAgIDggIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDhfczAgICAgIik7CisgICAgICAgIDkgIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MDlfczEgICAgIik7CisgICAgICAgIDEwIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTBfYTAgICAgIik7CisgICAgICAgIDExIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTFfYTEgICAgIik7CisgICAgICAgIDEyIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTJfYTIgICAgIik7CisgICAgICAgIDEzIDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTNfYTMgICAgIik7CisgICAgICAgIDE0IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTRfYTQgICAgIik7CisgICAgICAgIDE1IDogICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4MTVfYTUgICAgIik7CitgaWZuZGVmIFNDUjFfUlZFX0VYVAorICAgICAgICAxNiA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE2X2E2ICAgICIpOworICAgICAgICAxNyA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE3X2E3ICAgICIpOworICAgICAgICAxOCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE4X3MyICAgICIpOworICAgICAgICAxOSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDE5X3MzICAgICIpOworICAgICAgICAyMCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDIwX3M0ICAgICIpOworICAgICAgICAyMSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDIxX3M1ICAgICIpOworICAgICAgICAyMiA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDIyX3M2ICAgICIpOworICAgICAgICAyMyA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDIzX3M3ICAgICIpOworICAgICAgICAyNCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI0X3M4ICAgICIpOworICAgICAgICAyNSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI1X3M5ICAgICIpOworICAgICAgICAyNiA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI2X3MxMCAgICIpOworICAgICAgICAyNyA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI3X3MxMSAgICIpOworICAgICAgICAyOCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI4X3QzICAgICIpOworICAgICAgICAyOSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDI5X3Q0ICAgICIpOworICAgICAgICAzMCA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDMwX3Q1ICAgICIpOworICAgICAgICAzMSA6ICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeDMxX3Q2ICAgICIpOworYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICBkZWZhdWx0OiBiZWdpbgorICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgeHh4ICAgICAgICIpOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmR0YXNrCisKK2BlbmRpZiAvLyBTQ1IxX1RSQUNFX0xPR19FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1QUkYgUmVnaXN0ZXJzIGFzc2lnbm1lbnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8wMF9aRVJPICAgPSAnMDsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDFfUkEgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDJfU1AgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDNfR1AgICAgID0gbXByZjJ0cmFjZV9pbnRfaVszXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDRfVFAgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs0XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDVfVDAgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs1XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDZfVDEgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs2XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDdfVDIgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs3XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDhfUzAgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs4XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMDlfUzEgICAgID0gbXByZjJ0cmFjZV9pbnRfaVs5XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTBfQTAgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxMF07Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzExX0ExICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTFdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xMl9BMiAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzEyXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMTNfQTMgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxM107Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE0X0E0ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTRdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xNV9BNSAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE1XTsKK2BpZm5kZWYgU0NSMV9SVkVfRVhUCithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE2X0E2ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTZdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8xN19BNyAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzE3XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMThfUzIgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsxOF07Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzE5X1MzICAgICA9IG1wcmYydHJhY2VfaW50X2lbMTldOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yMF9TNCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzIwXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjFfUzUgICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyMV07Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzIyX1M2ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjJdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yM19TNyAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzIzXTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjRfUzggICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyNF07Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI1X1M5ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjVdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yNl9TMTAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI2XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMjdfUzExICAgID0gbXByZjJ0cmFjZV9pbnRfaVsyN107Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzI4X1QzICAgICA9IG1wcmYydHJhY2VfaW50X2lbMjhdOworYXNzaWduIG1wcmZfaW50X2FsaWFzLklOVF8yOV9UNCAgICAgPSBtcHJmMnRyYWNlX2ludF9pWzI5XTsKK2Fzc2lnbiBtcHJmX2ludF9hbGlhcy5JTlRfMzBfVDUgICAgID0gbXByZjJ0cmFjZV9pbnRfaVszMF07Cithc3NpZ24gbXByZl9pbnRfYWxpYXMuSU5UXzMxX1Q2ICAgICA9IG1wcmYydHJhY2VfaW50X2lbMzFdOworYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExlZ2FjeSB0aW1lIGNvdW50ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIGNvdW50ZXIgaXMgbGVmdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBjdXJyZW50IFVWTSBlbnZpcm9ubWVudAorCitpbnQgICAgIHRpbWVfY250OworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICB0aW1lX2NudCAgICA8PSAwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRpbWVfY250ICAgIDw9IHRpbWVfY250ICsgMTsKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWwgcGFydCBwaXBlbGluZSB0cmFjZWxvZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpZmRlZiBTQ1IxX1RSQUNFX0xPR19FTgorLy8gRmlsZXMgb3BlbmluZyBhbmQgd3JpdGluZyBpbml0aWFsIGhlYWRlcgoraW5pdGlhbCBiZWdpbgorICAgICR0aW1lZm9ybWF0KC05LCAwLCAiIG5zIiwgMTApOworICAgICMxIGhhcnQuaGV4dG9hKHNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pKTsKKworICAgIHRyYWNlX2ZoYW5kbGVyX2NvcmUgPSAkZm9wZW4oeyJ0cmFjZWxvZ19jb3JlXyIsIGhhcnQsICIubG9nIn0sICJ3Iik7CisKKyAgICAvLyBXcml0aW5nIGluaXRpYWwgaGVhZGVyCisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiMgUlRMX0lEICVoXG4iLCBTQ1IxX0NTUl9NSU1QSUQpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjXG4iKTsKKyAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyBSIC0gcmV0dXJuIGZyb20gdHJhcDpcbiIpOworICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIDEgLSBNUkVUXG4iKTsKKyAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICAwIC0gbm8gcmV0dXJuXG4iKTsKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyBFdmVudHM6XG4iKTsKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIyAgICBOIC0gbm8gZXZlbnRcbiIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIEUgLSBleGNlcHRpb25cbiIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIEkgLSBpbnRlcnJ1cHRcbiIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgIFcgLSB3YWtldXBcbiIpOworZW5kCisKKy8vIENvcmUgcmVzZXQgbG9nZ2luZyBhbmQgaGVhZGVyIHByaW50aW5nCithbHdheXMgQChwb3NlZGdlIHJzdF9uKSBiZWdpbgorICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CitgaWZuZGVmIFZFUklMQVRPUgorICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiMgJTE0dCA6IENvcmUgUmVzZXRcbiIsICR0aW1lKCkpOworYGVsc2UKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIjIDogQ29yZSBSZXNldFxuIik7CitgZW5kaWYKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjIFRlc3Q6ICVzXG4iLCB0ZXN0X25hbWUpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIjICAgICAgICAgICBUaW1lICAiKTsKKyAgICAvLyAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiIFIgICIpOworICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgICIgRXYgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBDdXJyX1BDICAgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBJbnN0ciAgICAgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBOZXh0X1BDICAgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBSZWcgICAgICAgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIiBWYWx1ZSAgICAgIik7CisgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiXG4iKTsKKyAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29tbW9uIHRyYWNlIHBhcnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gdHJhY2VfZmxhZyAgID0gMSdiMTsKK2Fzc2lnbiB0cmFjZV91cGRhdGUgPSAoZXh1MnRyYWNlX3VwZGF0ZV9wY19lbl9pIHwgbXByZjJ0cmFjZV93cl9lbl9pKSAmIHRyYWNlX2ZsYWc7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGN1cnJlbnRfdGltZSAgICA8PSAwOworICAgICAgICBldmVudF90eXBlICAgICAgPD0gIk4iOworCisgICAgICAgIHRyYWNlX3BjICAgICAgICA8PSAneDsKKyAgICAgICAgdHJhY2VfbnBjICAgICAgIDw9ICd4OworICAgICAgICB0cmFjZV9pbnN0ciAgICAgPD0gJ3g7CisKKyAgICAgICAgdHJhY2VfdXBkYXRlX3IgIDw9IDEnYjA7CisKKyAgICAgICAgbXByZl91cCAgICAgICAgIDw9ICcwOworICAgICAgICBtcHJmX2FkZHIgICAgICAgPD0gJzA7CisgICAgICAgIG1wcmZfd2RhdGEgICAgICA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICB0cmFjZV91cGRhdGVfciA8PSB0cmFjZV91cGRhdGU7CisgICAgICAgIGlmICh0cmFjZV91cGRhdGUpIGJlZ2luCitgaWZkZWYgVkVSSUxBVE9SCisgICAgICAgICAgICBjdXJyZW50X3RpbWUgIDw9IHRpbWVfY250OworYGVsc2UKKyAgICAgICAgICAgIGN1cnJlbnRfdGltZSAgPD0gJHRpbWUoKTsKK2BlbmRpZgorICAgICAgICAgICAgdHJhY2VfcGMgICAgICA8PSB0cmFjZV9ucGM7CisgICAgICAgICAgICB0cmFjZV9ucGMgICAgIDw9IGV4dTJ0cmFjZV91cGRhdGVfcGNfaTsKKyAgICAgICAgICAgIHRyYWNlX2luc3RyICAgPD0gaWZ1MnRyYWNlX2luc3RyX2k7CisKKyAgICAgICAgICAgIGlmIChjc3IydHJhY2VfZV9leGNfaSkgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBFeGNlcHRpb24KKyAgICAgICAgICAgICAgICBldmVudF90eXBlICA8PSAiRSI7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKGNzcjJ0cmFjZV9lX2lycV9pKSBiZWdpbgorICAgICAgICAgICAgICAgIC8vIElSUQorICAgICAgICAgICAgICAgIGV2ZW50X3R5cGUgIDw9ICJJIjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBpZiAocGlwZTJ0cmFjZV9lX3dha2VfaSkgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBXYWtlCisgICAgICAgICAgICAgICAgZXZlbnRfdHlwZSA8PSAiVyI7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIGlmIChjc3IydHJhY2VfZV9tcmV0X2kpIGJlZ2luCisgICAgICAgICAgICAvLyAgICAgLy8gTVJFVAorICAgICAgICAgICAgLy8gICAgIGV2ZW50X3R5cGUgIDw9ICJSIjsKKyAgICAgICAgICAgIC8vIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIC8vIE5vIGV2ZW50CisgICAgICAgICAgICAgICAgZXZlbnRfdHlwZSA8PSAiTiI7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gV3JpdGUgbG9nIHNpZ25hbHMKKyAgICAgICAgbXByZl91cCAgICA8PSBtcHJmMnRyYWNlX3dyX2VuX2k7CisgICAgICAgIG1wcmZfYWRkciAgPD0gbXByZjJ0cmFjZV93cl9lbl9pID8gbXByZjJ0cmFjZV93cl9hZGRyX2kgOiAneDsKKyAgICAgICAgbXByZl93ZGF0YSA8PSBtcHJmMnRyYWNlX3dyX2VuX2kgPyBtcHJmMnRyYWNlX3dyX2RhdGFfaSA6ICd4OworICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29yZSBNUFJGIGxvZ2dpbmcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmICh0cmFjZV91cGRhdGVfcikgYmVnaW4KKworICAgICAgICAgICAgdHJhY2Vfd3JpdGVfY29tbW9uKCk7CisKKyAgICAgICAgICAgIGNhc2UgKGV2ZW50X3R5cGUpCisgICAgICAgICAgICAgICAgIlciICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIFdha2V1cAorICAgICAgICAgICAgICAgICAgICBpZiAoY3NyX3RyYWNlMS5taXAgJiBjc3JfdHJhY2UxLm1pZSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtaXAgICAgICAgICUwOHhcbiIsIGNzcl90cmFjZTEubWlwICk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV93cml0ZV9jb21tb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtaWUgICAgICAgICUwOHgiLCBjc3JfdHJhY2UxLm1pZSApOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAiTiIgICAgIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gUmVndWxhcgorICAgICAgICAgICAgICAgICAgICBpZiAobXByZl91cCAmJiBtcHJmX2FkZHIgIT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiB4JTJkICAgICAgJTA4eCIsIG1wcmZfYWRkciwgbXByZl93ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV93cml0ZV9pbnRfd2FsaWFzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgJTA4eCIsIG1wcmZfd2RhdGEpOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIC0tLSAgICAgICAgLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIlIiICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIE1SRVQKKyAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1zdGF0dXMgICAgJTA4eCIsIGNzcl90cmFjZTEubXN0YXR1cyk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIkUiLCAiSSI6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIElSUS9FeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAiIG1zdGF0dXMgICAgJTA4eFxuIiwgY3NyX3RyYWNlMS5tc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2Vfd3JpdGVfY29tbW9uKCk7CisgICAgICAgICAgICAgICAgICAgICRmd3JpdGUodHJhY2VfZmhhbmRsZXJfY29yZSwgIiBtZXBjICAgICAgICUwOHhcbiIsIGNzcl90cmFjZTEubWVwYyk7CisgICAgICAgICAgICAgICAgICAgIHRyYWNlX3dyaXRlX2NvbW1vbigpOworICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbWNhdXNlICAgICAlMDh4XG4iLCBjc3JfdHJhY2UxLm1jYXVzZSk7CisgICAgICAgICAgICAgICAgICAgIHRyYWNlX3dyaXRlX2NvbW1vbigpOworICAgICAgICAgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICIgbXR2YWwgICAgICAlMDh4IiwgICBjc3JfdHJhY2UxLm10dmFsKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZSh0cmFjZV9maGFuZGxlcl9jb3JlLCAgIlxuIik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAkZndyaXRlKHRyYWNlX2ZoYW5kbGVyX2NvcmUsICAiXG4iKTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb3JlIENTUiBsb2dnaW5nCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjc3JfdHJhY2UxLm10dmVjICAgICAgICA9IHtjc3IydHJhY2VfbXR2ZWNfYmFzZV9pLCA0J2QwLCAyJyhjc3IydHJhY2VfbXR2ZWNfbW9kZV9pKX07CisgICAgY3NyX3RyYWNlMS5tZXBjICAgICAgICAgPQorYGlmZGVmIFNDUjFfUlZDX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NzcjJ0cmFjZV9tZXBjX2ksIDEnYjB9OworYGVsc2UgLy8gU0NSMV9SVkNfRVhUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3NyMnRyYWNlX21lcGNfaSwgMidiMDB9OworYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAorICAgIGNzcl90cmFjZTEubWNhdXNlICAgICAgID0ge2NzcjJ0cmFjZV9tY2F1c2VfaXJxX2ksIHR5cGVfc2NyMV9jc3JfbWNhdXNlX2VjX3YnKGNzcjJ0cmFjZV9tY2F1c2VfZWNfaSl9OworICAgIGNzcl90cmFjZTEubXR2YWwgICAgICAgID0gY3NyMnRyYWNlX210dmFsX2k7CisKKyAgICBjc3JfdHJhY2UxLm1zdGF0dXMgICAgICA9ICcwOworICAgIGNzcl90cmFjZTEubWllICAgICAgICAgID0gJzA7CisgICAgY3NyX3RyYWNlMS5taXAgICAgICAgICAgPSAnMDsKKworICAgIGNzcl90cmFjZTEubXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01JRV9PRkZTRVRdICAgICA9IGNzcjJ0cmFjZV9tc3RhdHVzX21pZV9pOworICAgIGNzcl90cmFjZTEubXN0YXR1c1tTQ1IxX0NTUl9NU1RBVFVTX01QSUVfT0ZGU0VUXSAgICA9IGNzcjJ0cmFjZV9tc3RhdHVzX21waWVfaTsKKyAgICBjc3JfdHJhY2UxLm1zdGF0dXNbU0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUKzE6U0NSMV9DU1JfTVNUQVRVU19NUFBfT0ZGU0VUXSAgID0gU0NSMV9DU1JfTVNUQVRVU19NUFA7CisgICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tc2llX2k7CisgICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tdGllX2k7CisgICAgY3NyX3RyYWNlMS5taWVbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pZV9tZWllX2k7CisgICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tc2lwX2k7CisgICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01USUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tdGlwX2k7CisgICAgY3NyX3RyYWNlMS5taXBbU0NSMV9DU1JfTUlFX01FSUVfT0ZGU0VUXSAgICAgICAgICAgID0gY3NyMnRyYWNlX21pcF9tZWlwX2k7CitlbmQKKworYGVuZGlmIC8vIFNDUjFfVFJBQ0VfTE9HX0VOCisKK2VuZG1vZHVsZSA6IHNjcjFfdHJhY2Vsb2cKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNjE1NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9jZy5zdgpAQCAtMCwwICsxLDMyIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2NnLnN2PgorLy8vIEBicmllZiAgICAgIFNDUjEgY2xvY2sgZ2F0ZSBwcmltaXRpdmUKKy8vLworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKworYGlmZGVmIFNDUjFfQ0xLQ1RSTF9FTgorbW9kdWxlIHNjcjFfY2cgKAorICAgIGlucHV0ICAgbG9naWMgICBjbGssCisgICAgaW5wdXQgICBsb2dpYyAgIGNsa19lbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgdGVzdF9tb2RlLAorICAgIG91dHB1dCAgbG9naWMgICBjbGtfb3V0CispOworCisvLyBUaGUgY29kZSBiZWxvdyBpcyBhIGNsb2NrIGdhdGUgbW9kZWwgZm9yIHNpbXVsYXRpb24uCisvLyBGb3Igc3ludGhlc2lzLCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKy8vIGNsb2NrIGdhdGUgY29kZS4KKworbG9naWMgbGF0Y2hfZW47CisKK2Fsd2F5c19sYXRjaCBiZWdpbgorICAgIGlmICh+Y2xrKSBiZWdpbgorICAgICAgICBsYXRjaF9lbiA8PSB0ZXN0X21vZGUgfCBjbGtfZW47CisgICAgZW5kCitlbmQKKworYXNzaWduIGNsa19vdXQgID0gbGF0Y2hfZW4gJiBjbGs7CisKK2VuZG1vZHVsZSA6IHNjcjFfY2cKKworYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3ByaW1pdGl2ZXMvc2NyMV9yZXNldF9jZWxscy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWYzNDdjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX3Jlc2V0X2NlbGxzLnN2CkBAIC0wLDAgKzEsMjMxIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3N5bmNfcnN0bi5zdj4KKy8vLyBAYnJpZWYgICAgICBDZWxscyBmb3IgcmVzZXQgaGFuZGxpbmcKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXNldCBCdWZmZXIgQ2VsbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHNjcjFfcmVzZXRfYnVmX2NlbGwgKAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGNsaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByZXNldF9uX2luLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fb3V0LAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fc3RhdHVzCispOworCitsb2dpYyAgICAgICByZXNldF9uX2ZmOworbG9naWMgICAgICAgcmVzZXRfbl9zdGF0dXNfZmY7Citsb2dpYyAgICAgICByc3Rfbl9tdXg7CisKK2Fzc2lnbiByc3Rfbl9tdXggPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uX211eCwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3Rfbl9tdXgpIGJlZ2luCisgICAgICAgIHJlc2V0X25fZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICByZXNldF9uX2ZmIDw9IHJlc2V0X25faW47CisgICAgZW5kCitlbmQKKworYXNzaWduIHJlc2V0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByZXNldF9uX2ZmOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uX211eCwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3Rfbl9tdXgpIGJlZ2luCisgICAgICAgIHJlc2V0X25fc3RhdHVzX2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgcmVzZXRfbl9zdGF0dXNfZmYgPD0gcmVzZXRfbl9pbjsKKyAgICBlbmQKK2VuZAorYXNzaWduIHJlc2V0X25fc3RhdHVzID0gcmVzZXRfbl9zdGF0dXNfZmY7CisKK2VuZG1vZHVsZSA6IHNjcjFfcmVzZXRfYnVmX2NlbGwKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgQ0RDIFN5bmNocm9uaXphdGlvbiBDZWxsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittb2R1bGUgc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKKyAgICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNUQUdFU19BTU9VTlQgPSAyCispICgKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICByc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBjbGssCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcnN0X25faW4sCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0CispOworCitsb2dpYyBbU1RBR0VTX0FNT1VOVC0xOjBdICAgcnN0X25fZGZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3JzdF9uX2luOworCithc3NpZ24gbG9jYWxfcnN0X25faW4gPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uOworCitnZW5lcmF0ZQorCitpZiAoU1RBR0VTX0FNT1VOVCA9PSAxKQorCitiZWdpbiA6IGdlbl9yZXNldF9zeW5jX2NlbGxfc2luZ2xlCisgICAgYWx3YXlzX2ZmIEAobmVnZWRnZSBsb2NhbF9yc3Rfbl9pbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgICAgIGlmICh+bG9jYWxfcnN0X25faW4pIGJlZ2luCisgICAgICAgICAgICByc3Rfbl9kZmYgPD0gMSdiMDsKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIHJzdF9uX2RmZiA8PSByc3Rfbl9pbjsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQgOiBnZW5fcmVzZXRfc3luY19jZWxsX3NpbmdsZQorCitlbHNlIC8vIFNUQUdFU19BTU9VTlQgPiAxCisKK2JlZ2luIDogZ2VuX3Jlc2V0X3N5bmNfY2VsbF9tdWx0aQorICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgbG9jYWxfcnN0X25faW4sIHBvc2VkZ2UgY2xrKQorICAgIGJlZ2luCisgICAgICAgIGlmICh+bG9jYWxfcnN0X25faW4pIGJlZ2luCisgICAgICAgICAgICByc3Rfbl9kZmYgPD0gJzA7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByc3Rfbl9kZmYgPD0ge3JzdF9uX2RmZltTVEFHRVNfQU1PVU5ULTI6MF0sIHJzdF9uX2lufTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQgOiBnZW5fcmVzZXRfc3luY19jZWxsX211bHRpCisKK2VuZGdlbmVyYXRlCisKK2Fzc2lnbiByc3Rfbl9vdXQgPSAodGVzdF9tb2RlID09IDEnYjEpID8gdGVzdF9yc3RfbiA6IHJzdF9uX2RmZltTVEFHRVNfQU1PVU5ULTFdOworCitlbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X3N5bmNfY2VsbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEYXRhIENEQy9SREMgU3luY2hyb25pemF0aW9uIENlbGwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21vZHVsZSBzY3IxX2RhdGFfc3luY19jZWxsICMoCisgICAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU1RBR0VTX0FNT1VOVCA9IDEKKykgKAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGNsaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBkYXRhX2luLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIGRhdGFfb3V0CispOworCitsb2dpYyBbU1RBR0VTX0FNT1VOVC0xOjBdIGRhdGFfZGZmOworCitnZW5lcmF0ZQorCitpZiAoU1RBR0VTX0FNT1VOVCA9PSAxKQorCitiZWdpbiA6IGdlbl9kYXRhX3N5bmNfY2VsbF9zaW5nbGUKKyAgICBhbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykKKyAgICBiZWdpbgorICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICAgICAgZGF0YV9kZmYgPD0gMSdiMDsKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIGRhdGFfZGZmIDw9IGRhdGFfaW47CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kIDogZ2VuX2RhdGFfc3luY19jZWxsX3NpbmdsZQorCitlbHNlIC8vIFNUQUdFU19BTU9VTlQgPiAxCisKK2JlZ2luIDogZ2VuX2RhdGFfc3luY19jZWxsX211bHRpCisgICAgYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspCisgICAgYmVnaW4KKyAgICAgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgICAgIGRhdGFfZGZmIDw9ICcwOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgZGF0YV9kZmYgPD0ge2RhdGFfZGZmW1NUQUdFU19BTU9VTlQtMjowXSwgZGF0YV9pbn07CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kIDogZ2VuX2RhdGFfc3luY19jZWxsX211bHRpCisKK2VuZGdlbmVyYXRlCisKK2Fzc2lnbiBkYXRhX291dCA9IGRhdGFfZGZmW1NUQUdFU19BTU9VTlQtMV07CisKK2VuZG1vZHVsZSA6IHNjcjFfZGF0YV9zeW5jX2NlbGwKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgLyBSREMgUXVhbGlmeWVyIEFkYXB0ZXIgQ2VsbAorLy8gICAoUmVzZXQgR2VuZXJhdGlvbiBDZWxsIHcvIFJEQyBRdWFsaWZ5ZXIgQWRhcHRhdGlvbiBjaXJjdWl0cnkpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUb3RhbCBzdGFnZXMgYW1vdW50ID0KKy8vICAgIDEgRnJvbnQgU3luYyBzdGFnZSBcCisvLyAgKyAxIChkZWxheSBpbnRyb2R1Y2VkIGJ5IHRoZSByZXNldCBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHNjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgY2xrLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHJlc2V0X25faW5fc3luYywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICByZXNldF9uX291dF9xbGZ5LAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fb3V0LAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJlc2V0X25fc3RhdHVzCispOworCitsb2dpYyByc3Rfbl9tdXg7Citsb2dpYyByZXNldF9uX2Zyb250X2ZmOworCisvLyBGcm9udCBzeW5jIHN0YWdlCithc3NpZ24gcnN0X25fbXV4ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3RfbjsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3Rfbl9tdXgsIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X25fbXV4KSBiZWdpbgorICAgICAgICByZXNldF9uX2Zyb250X2ZmICAgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgcmVzZXRfbl9mcm9udF9mZiAgICA8PSByZXNldF9uX2luX3N5bmM7CisgICAgZW5kCitlbmQKKworLy8gICBTeW5jIHJlc2V0IG91dHB1dCBmb3IgYWxsIHJlc2V0IHF1YWxpZmllciBjaGFpbnMgdGFyZ2V0aW5nIHRoaXMgcmVzZXQgZG9tYWluCisvLyAoZm9yIHJlc2V0LWRvbWFpbi1jcm9zc2luZ3Mgd2l0aCB0aGUgZ2l2ZW4gcmVzZXQgZG9tYWluIGFzIGEgZGVzdGluYXRpb24pLgorYXNzaWduIHJlc2V0X25fb3V0X3FsZnkgPSByZXNldF9uX2Zyb250X2ZmOworCisvLyBSZXNldCBvdXRwdXQgYnVmZmVyCitzY3IxX3Jlc2V0X2J1Zl9jZWxsCitpX3Jlc2V0X291dHB1dF9idWYgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgKHJzdF9uKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgIChjbGspLAorICAgIC50ZXN0X21vZGUgICAgICAgICAgKHRlc3RfbW9kZSksCisgICAgLnRlc3RfcnN0X24gICAgICAgICAodGVzdF9yc3RfbiksCisgICAgLnJlc2V0X25faW4gICAgICAgICAocmVzZXRfbl9mcm9udF9mZiksCisgICAgLnJlc2V0X25fb3V0ICAgICAgICAocmVzZXRfbl9vdXQpLAorICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKHJlc2V0X25fc3RhdHVzKQorKTsKKworZW5kbW9kdWxlIDogc2NyMV9yZXNldF9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jCisKK21vZHVsZSBzY3IxX3Jlc2V0X2FuZDJfY2VsbCAoCisgICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgcnN0X25faW4sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0CispOworCithc3NpZ24gcnN0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiAoJnJzdF9uX2luKTsKKworZW5kbW9kdWxlIDogc2NyMV9yZXNldF9hbmQyX2NlbGwKKworCittb2R1bGUgc2NyMV9yZXNldF9hbmQzX2NlbGwgKAorICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgIHJzdF9uX2luLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHRlc3RfcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9tb2RlLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHJzdF9uX291dAorKTsKKworYXNzaWduIHJzdF9uX291dCA9ICh0ZXN0X21vZGUgPT0gMSdiMSkgPyB0ZXN0X3JzdF9uIDogKCZyc3Rfbl9pbik7CisKK2VuZG1vZHVsZSA6IHNjcjFfcmVzZXRfYW5kM19jZWxsCisKKworbW9kdWxlIHNjcjFfcmVzZXRfbXV4Ml9jZWxsICgKKyAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICByc3Rfbl9pbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICBzZWxlY3QsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdGVzdF9yc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB0ZXN0X21vZGUsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgcnN0X25fb3V0CispOworCithc3NpZ24gcnN0X25fb3V0ID0gKHRlc3RfbW9kZSA9PSAxJ2IxKSA/IHRlc3RfcnN0X24gOiByc3Rfbl9pbltzZWxlY3RdOworCitlbmRtb2R1bGUgOiBzY3IxX3Jlc2V0X211eDJfY2VsbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2Nsa19jdHJsLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjcyZjQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2Nsa19jdHJsLnN2CkBAIC0wLDAgKzEsNTUgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfY2xrX2N0cmwuc3Y+CisvLy8gQGJyaWVmICAgICAgU0NSMSBjbG9jayBjb250cm9sCisvLy8KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK2BpZmRlZiBTQ1IxX0NMS0NUUkxfRU4KK21vZHVsZSBzY3IxX2Nsa19jdHJsICgKKyAgICBpbnB1dCAgIGxvZ2ljICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9jayBjb250cm9sIG1vZHVsZSBjbG9jaworICAgIGlucHV0ICAgbG9naWMgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIGNvbnRyb2wgbW9kdWxlIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAgICAgLy8gREZUIFRlc3QgTW9kZQorICAgIGlucHV0ICAgbG9naWMgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IHJlc2V0CisKKyAgICBpbnB1dCAgIGxvZ2ljICAgcGlwZTJjbGtjdGxfc2xlZXBfcmVxX2ksICAgICAgICAvLyBDTEsgZGlzYWJsZSByZXF1ZXN0IGZyb20gcGlwZQorICAgIGlucHV0ICAgbG9naWMgICBwaXBlMmNsa2N0bF93YWtlX3JlcV9pLCAgICAgICAgIC8vIENMSyBlbmFibGUgcmVxdWVzdCBmcm9tIHBpcGUKKworICAgIG91dHB1dCAgbG9naWMgICBjbGtjdGwycGlwZV9jbGtfYWx3X29uX28sICAgICAgIC8vIE5vdCBnYXRlZCBwaXBlIENMSworICAgIG91dHB1dCAgbG9naWMgICBjbGtjdGwycGlwZV9jbGtfbywgICAgICAgICAgICAgIC8vIEdhdGVkIHBpcGUKKyAgICBvdXRwdXQgIGxvZ2ljICAgY2xrY3RsMnBpcGVfY2xrX2VuX28sICAgICAgICAgICAvLyBDTEsgZW5hYmxlZCBmbGFnCisgICAgb3V0cHV0ICBsb2dpYyAgIGNsa2N0bDJwaXBlX2Nsa19kYmdjX28gICAgICAgICAgLy8gQ0xLIGZvciBwaXBlIGRlYnVnIHN1YnN5c3RlbQorKTsKKworbG9naWMgY3RybF9yc3RfbjsKKworYXNzaWduIGNsa2N0bDJwaXBlX2Nsa19hbHdfb25fbyA9IGNsazsKK2Fzc2lnbiBjbGtjdGwycGlwZV9jbGtfZGJnY19vICAgPSBjbGs7Cithc3NpZ24gY3RybF9yc3RfbiAgID0gKHRlc3RfbW9kZSkgPyB0ZXN0X3JzdF9uIDogcnN0X247CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIGN0cmxfcnN0X24pIGJlZ2luCisgICAgaWYgKH5jdHJsX3JzdF9uKSBiZWdpbgorICAgICAgICBjbGtjdGwycGlwZV9jbGtfZW5fbyA8PSAxJ2IxOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmIChjbGtjdGwycGlwZV9jbGtfZW5fbykgYmVnaW4KKyAgICAgICAgICAgIGlmIChwaXBlMmNsa2N0bF9zbGVlcF9yZXFfaSAmIH5waXBlMmNsa2N0bF93YWtlX3JlcV9pKSBiZWdpbgorICAgICAgICAgICAgICAgIGNsa2N0bDJwaXBlX2Nsa19lbl9vIDw9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gfmNsa2N0bDJwaXBlX2Nsa19lbl9vCisgICAgICAgICAgICBpZiAocGlwZTJjbGtjdGxfd2FrZV9yZXFfaSkgYmVnaW4KKyAgICAgICAgICAgICAgICBjbGtjdGwycGlwZV9jbGtfZW5fbyA8PSAxJ2IxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAvLyBwaXBlbGluZQorICAgIGVuZAorZW5kCisKK3NjcjFfY2cgaV9zY3IxX2NnX3BpcGUgKAorICAgIC5jbGsgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCisgICAgLmNsa19lbiAgICAgKGNsa2N0bDJwaXBlX2Nsa19lbl9vKSwKKyAgICAudGVzdF9tb2RlICAodGVzdF9tb2RlICAgICAgICAgICApLAorICAgIC5jbGtfb3V0ICAgIChjbGtjdGwycGlwZV9jbGtfbyAgICkKKyk7CisKK2VuZG1vZHVsZSA6IHNjcjFfY2xrX2N0cmwKKworYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfY29yZV90b3Auc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2NvcmVfdG9wLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmU0YmIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2NvcmVfdG9wLnN2CkBAIC0wLDAgKzEsNTE5IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2NvcmVfdG9wLnN2PgorLy8vIEBicmllZiAgICAgIFNDUjEgY29yZSB0b3AKKy8vLworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgorYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX3RhcGMuc3ZoIgorYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgorYGluY2x1ZGUgInNjcjFfaGR1LnN2aCIKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9JUElDX0VOCitgaW5jbHVkZSAic2NyMV9pcGljLnN2aCIKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KKworbW9kdWxlIHNjcjFfY29yZV90b3AgKAorICAgIC8vIENvbW1vbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAvLyBQb3dlci1VcCByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIENQVSByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAvLyBERlQgVGVzdCBNb2RlCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yc3RfbiwgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgY2xvY2sKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX28sICAgICAgICAgICAgICAgLy8gQ29yZSByZXNldAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmRjX3FsZnlfbywgICAgICAgICAgICAvLyBDb3JlIFJEQyBxdWFsaWZpZXIKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9vLCAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gcmVzZXQKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmRjX3FsZnlfbywgICAgICAgICAgICAgLy8gU3lzdGVtIFJEQyBxdWFsaWZpZXIKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gRnVzZXMKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICBjb3JlX2Z1c2VfbWhhcnRpZF9pLCAgICAgICAgLy8gRnVzZSBNSEFSVElEIHZhbHVlCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2Z1c2VfaWRjb2RlX2ksICAgICAgICAgLy8gRnVzZSBJRENPREUgdmFsdWUKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gSVJRCitgaWZkZWYgU0NSMV9JUElDX0VOCisgICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgY29yZV9pcnFfbGluZXNfaSwgICAgICAgICAgIC8vIEV4dGVybmFsIGludGVycnVwdCByZXF1ZXN0IGxpbmVzCitgZWxzZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaXJxX2V4dF9pLCAgICAgICAgICAgICAvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdAorYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaXJxX3NvZnRfaSwgICAgICAgICAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgaW50ZXJydXB0IHJlcXVlc3QKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lycV9tdGltZXJfaSwgICAgICAgICAgLy8gTWFjaGluZSB0aW1lciBpbnRlcnJ1cHQgcmVxdWVzdAorCisgICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgorICAgIGlucHV0ICAgbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfbXRpbWVyX3ZhbF9pLCAgICAgICAgICAvLyBNYWNoaW5lIHRpbWVyIHZhbHVlCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIC8vIERlYnVnIEludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uLCAgICAgICAgICAgICAgICAvLyBUZXN0IFJlc2V0IChUUlNUbikKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RjaywgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBDbG9jayAoVENLKQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdG1zLCAgICAgICAgICAgICAgICAgICAvLyBUZXN0IE1vZGUgU2VsZWN0IChUTVMpCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZGksICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBJbnB1dCAoVERJKQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGRvLCAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgT3V0cHV0IChURE8pCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZG9fZW4sICAgICAgICAgICAgICAgIC8vIFRETyBFbmFibGUsIHNpZ25hbCBmb3IgVERPIGJ1ZmZlciBjb250cm9sCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworICAgIC8vIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtMmNvcmVfcmVxX2Fja19pLCAgICAgICAgLy8gSU1FTSByZXF1ZXN0IGFja25vd2xlZGdlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJpbWVtX3JlcV9vLCAgICAgICAgICAgIC8vIElNRU0gcmVxdWVzdAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgIGNvcmUyaW1lbV9jbWRfbywgICAgICAgICAgICAvLyBJTUVNIGNvbW1hbmQKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICBjb3JlMmltZW1fYWRkcl9vLCAgICAgICAgICAgLy8gSU1FTSBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgaW1lbTJjb3JlX3JkYXRhX2ksICAgICAgICAgIC8vIElNRU0gcmVhZCBkYXRhCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgaW1lbTJjb3JlX3Jlc3BfaSwgICAgICAgICAgIC8vIElNRU0gcmVzcG9uc2UKKworICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW0yY29yZV9yZXFfYWNrX2ksICAgICAgICAvLyBETUVNIHJlcXVlc3QgYWNrbm93bGVkZ2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtZW1fcmVxX28sICAgICAgICAgICAgLy8gRE1FTSByZXF1ZXN0CisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX2NtZF9vLCAgICAgICAgICAgIC8vIERNRU0gY29tbWFuZAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgIGNvcmUyZG1lbV93aWR0aF9vLCAgICAgICAgICAvLyBETUVNIGRhdGEgd2lkdGgKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vLCAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX3dkYXRhX28sICAgICAgICAgIC8vIERNRU0gd3JpdGUgZGF0YQorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW0yY29yZV9yZGF0YV9pLCAgICAgICAgICAvLyBETUVNIHJlYWQgZGF0YQorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgIGRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgICAvLyBETUVNIHJlc3BvbnNlCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHBhcmFtZXRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DT1JFX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgICAgPSAyOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbHMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZXNldCBMb2dpYworYGlmZGVmIFNDUjFfREJHX0VOCitgZWxzZSAvLyBTQ1IxX0RCR19FTgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9pbl9zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9xbGZ5OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfbl9zdGF0dXM7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X247Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yc3Rfc3RhdHVzOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJoZHVfcmRjX3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtX3JkY19xbGZ5OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uX3N5bmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKKworYGlmZGVmIFNDUjFfREJHX0VOCisvLyBUQVBDLURNIEludGVyZmFjZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsOworbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICAgICAgICAgdGFwY19kbWlfY2hfaWQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF9jYXB0dXJlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF91cGRhdGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZGk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG87CisvLworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2VsX3RhcG91dDsKK2xvZ2ljIFtTQ1IxX0RCR19ETUlfQ0hfSURfV0lEVEgtMTowXSAgICAgICAgICAgIHRhcGNfZG1pX2NoX2lkX3RhcG91dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX2NhcHR1cmVfdGFwb3V0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfc2hpZnRfdGFwb3V0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kbWlfY2hfdXBkYXRlX3RhcG91dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZG1pX2NoX3RkaV90YXBvdXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9jaF90ZG9fdGFwaW47CisvLworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV93cjsKK2xvZ2ljIFtTQ1IxX0RCR19ETUlfQUREUl9XSURUSC0xOjBdICAgICAgICAgICAgIGRtaV9hZGRyOworbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICAgICAgICAgZG1pX3dkYXRhOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3Jlc3A7Citsb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICAgICAgICBkbWlfcmRhdGE7CisvLyBUQVBDLVNDVSBJbnRlcmZhY2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfc2N1X2NoX3NlbF90YXBvdXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NjdV9jaF90ZG87Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2NoX3RkbzsKKy8vIFNDVSBuZXRzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X247Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X3N0YXR1czsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3RfbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdTJkbV9yZGNfcWxmeTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kbV9yc3RfbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9yc3RfbjsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKy8vIERNLVBpcGVsaW5lIEludGVyZmFjZQorLy8gSEFSVCBSdW4gQ29udHJvbCBpL2YKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2FjdGl2ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXE7Cit0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmVzcDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX2NtZF9yZXNwX3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9jbWRfcmNvZGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X2V2ZW50OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9ldmVudF9xbGZ5OwordHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICAgICAgICAgZG1faGFydF9zdGF0dXM7Cit0eXBlX3NjcjFfaGR1X2hhcnRzdGF0dXNfcyAgICAgICAgICAgICAgICAgICAgICBkbV9oYXJ0X3N0YXR1c19xbGZ5OworLy8gUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKK2xvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcjsKK2xvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgICAgICAgIGRtX3BidWZfYWRkcl9xbGZ5OworbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICAgICAgICAgZG1fcGJ1Zl9pbnN0cjsKKy8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ19yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3JlcV9xbGZ5OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fZHJlZ193cjsKK2xvZ2ljIFtTQ1IxX0hEVV9EQVRBX1JFR19XSURUSC0xOjBdICAgICAgICAgICAgIGRtX2RyZWdfd2RhdGE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX3Jlc3A7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9kcmVnX2ZhaWw7Citsb2dpYyBbU0NSMV9IRFVfREFUQV9SRUdfV0lEVEgtMTowXSAgICAgICAgICAgICBkbV9kcmVnX3JkYXRhOworCitsb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGU7Citsb2dpYyBbYFNDUjFfWExFTi0xIDogMF0gICAgICAgICAgICAgICAgICAgICAgICBkbV9wY19zYW1wbGVfcWxmeTsKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisvLyBHbG9iYWwgY2xvY2sgZ2F0aW5nIGxvZ2ljCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcF9waXBlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FrZV9waXBlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX3BpcGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfcGlwZV9lbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19kYmdjOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2Fsd19vbjsKK2BlbmRpZiAvLyBTQ1IxX0NMS0NUUkxfRU4KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IExvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX0RCR19FTgorc2NyMV9zY3UgICAgaV9zY3UgKAorICAgIC8vIEdsb2JhbCBzaWduYWxzCisgICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICApLAorICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgICAgICAoY3B1X3JzdF9uICAgICAgICAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBUQVBDIHNjYW4tY2hhaW5zCisgICAgLnRhcGNzeW5jMnNjdV9jaF9zZWxfaSAgICAgICh0YXBjX3NjdV9jaF9zZWwgICAgKSwKKyAgICAudGFwY3N5bmMyc2N1X2NoX2lkX2kgICAgICAgKCcwICAgICAgICAgICAgICAgICApLAorICAgIC50YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pICAodGFwY19kbWlfY2hfY2FwdHVyZSksCisgICAgLnRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgKSwKKyAgICAudGFwY3N5bmMyc2N1X2NoX3VwZGF0ZV9pICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSApLAorICAgIC50YXBjc3luYzJzY3VfY2hfdGRpX2kgICAgICAodGFwY19kbWlfY2hfdGRpICAgICksCisgICAgLnNjdTJ0YXBjc3luY19jaF90ZG9fbyAgICAgICh0YXBjX3NjdV9jaF90ZG8gICAgKSwKKworICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgorICAgIC5uZG1fcnN0X25faSAgICAgICAgICAgICAgICAobmRtX3JzdF9uICAgICAgICAgICksCisgICAgLmhhcnRfcnN0X25faSAgICAgICAgICAgICAgIChoYXJ0X3JzdF9uICAgICAgICAgKSwKKworICAgIC8vIEdlbmVyYXRlZCByZXNldHMKKyAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3RfbiAgICAgICAgICApLAorICAgIC5jb3JlX3JzdF9uX28gICAgICAgICAgICAgICAoY29yZV9yc3RfbiAgICAgICAgICksCisgICAgLmRtX3JzdF9uX28gICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgKSwKKyAgICAuaGR1X3JzdF9uX28gICAgICAgICAgICAgICAgKGhkdV9yc3RfbiAgICAgICAgICApLAorCisgICAgLy8gUmVzZXRzIHN0YXR1c2VzCisgICAgLnN5c19yc3Rfc3RhdHVzX28gICAgICAgICAgIChzeXNfcnN0X3N0YXR1cyAgICAgKSwKKyAgICAuY29yZV9yc3Rfc3RhdHVzX28gICAgICAgICAgKGNvcmVfcnN0X3N0YXR1cyAgICApLAorCisgICAgLy8gUmVzZXQgRG9tYWluIENyb3NzaW5nIChSREMpIHF1YWxpZmllcnMKKyAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgICApLAorICAgIC5jb3JlX3JkY19xbGZ5X28gICAgICAgICAgICAoY29yZV9yZGNfcWxmeV9vICAgICksCisgICAgLmNvcmUyaGR1X3JkY19xbGZ5X28gICAgICAgIChjb3JlMmhkdV9yZGNfcWxmeSAgKSwKKyAgICAuY29yZTJkbV9yZGNfcWxmeV9vICAgICAgICAgKGNvcmUyZG1fcmRjX3FsZnkgICApLAorICAgIC5oZHUyZG1fcmRjX3FsZnlfbyAgICAgICAgICAoaGR1MmRtX3JkY19xbGZ5ICAgICkKKyk7CisKK2Fzc2lnbiBzeXNfcnN0X25fbyAgICAgID0gc3lzX3JzdF9uOworCisvLyBSZXNldCBpbnB1dHMgYXJlIGFzc3VtZWQgc3luY2hyb25vdXMKK2Fzc2lnbiBwd3J1cF9yc3Rfbl9zeW5jID0gcHdydXBfcnN0X247CisKK2BlbHNlIC8vIFNDUjFfREJHX0VOCisKKy8vIFJlc2V0IGlucHV0cyBhcmUgYXNzdW1lZCBzeW5jaHJvbm91cworYXNzaWduIHB3cnVwX3JzdF9uX3N5bmMgICA9IHB3cnVwX3JzdF9uOworYXNzaWduIHJzdF9uX3N5bmMgICAgICAgICA9IHJzdF9uOworYXNzaWduIGNwdV9yc3Rfbl9zeW5jICAgICA9IGNwdV9yc3RfbjsKK2Fzc2lnbiBjb3JlX3JzdF9uX2luX3N5bmMgPSByc3Rfbl9zeW5jICYgY3B1X3JzdF9uX3N5bmM7CisKKy8vIENvcmUgUmVzZXQ6IGNvcmVfcnN0X24KK3NjcjFfcmVzZXRfcWxmeV9hZGFwdGVyX2NlbGxfc3luYyBpX2NvcmVfcnN0bl9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICgKKyAgICAucnN0X24gICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCisgICAgLnRlc3RfcnN0X24gICAgICAgICAodGVzdF9yc3RfbiAgICAgICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICApLAorICAgIC5yZXNldF9uX2luX3N5bmMgICAgKGNvcmVfcnN0X25faW5fc3luYyksCisgICAgLnJlc2V0X25fb3V0X3FsZnkgICAoY29yZV9yc3Rfbl9xbGZ5ICAgKSwKKyAgICAucmVzZXRfbl9vdXQgICAgICAgIChjb3JlX3JzdF9uICAgICAgICApLAorICAgIC5yZXNldF9uX3N0YXR1cyAgICAgKGNvcmVfcnN0X25fc3RhdHVzICkKKyk7CisKK3NjcjFfZGF0YV9zeW5jX2NlbGwgIygKKyAgICAuU1RBR0VTX0FNT1VOVCAgICAgIChTQ1IxX0NPUkVfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCispIGlfY29yZV9yc3RuX3N0YXR1c19zeW5jICgKKyAgICAucnN0X24gICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICApLAorICAgIC5kYXRhX2luICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1cyAgICAgKSwKKyAgICAuZGF0YV9vdXQgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXNfc3luYykKKyk7CisKK2Fzc2lnbiBjb3JlX3JzdF9zdGF0dXMgICAgICA9IH5jb3JlX3JzdF9uX3N0YXR1c19zeW5jOworYXNzaWduIGNvcmVfcmRjX3FsZnlfbyAgICAgID0gY29yZV9yc3Rfbl9xbGZ5OworCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KK2Fzc2lnbiBjb3JlX3JzdF9uX28gICAgICAgICA9IGNvcmVfcnN0X247CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0NSMSBwaXBlbGluZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3BpcGVfdG9wIGlfcGlwZV90b3AgKAorICAgIC8vIENvbnRyb2wKKyAgICAucGlwZV9yc3RfbiAgICAgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uICAgICAgICAgICAgICksCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAucGlwZTJoZHVfcmRjX3FsZnlfaSAgICAgICAgICAgIChjb3JlMmhkdV9yZGNfcWxmeSAgICAgICksCisgICAgLmRiZ19yc3RfbiAgICAgICAgICAgICAgICAgICAgICAoaGR1X3JzdF9uICAgICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCitgaWZuZGVmIFNDUjFfQ0xLQ1RSTF9FTgorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgKSwKK2BlbHNlIC8vIFNDUjFfQ0xLQ1RSTF9FTgorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsa19waXBlICAgICAgICAgICAgICAgKSwKKyAgICAucGlwZTJjbGtjdGxfc2xlZXBfcmVxX28gICAgICAgIChzbGVlcF9waXBlICAgICAgICAgICAgICksCisgICAgLnBpcGUyY2xrY3RsX3dha2VfcmVxX28gICAgICAgICAod2FrZV9waXBlICAgICAgICAgICAgICApLAorICAgIC5jbGtjdGwycGlwZV9jbGtfYWx3X29uX2kgICAgICAgKGNsa19hbHdfb24gICAgICAgICAgICAgKSwKKyAgICAuY2xrY3RsMnBpcGVfY2xrX2RiZ2NfaSAgICAgICAgIChjbGtfZGJnYyAgICAgICAgICAgICAgICksCisgICAgLmNsa2N0bDJwaXBlX2Nsa19lbl9pICAgICAgICAgICAoY2xrX3BpcGVfZW4gICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfQ0xLQ1RSTF9FTgorCisgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQorICAgIC5waXBlMmltZW1fcmVxX28gICAgICAgICAgICAgICAgKGNvcmUyaW1lbV9yZXFfbyAgICAgICAgKSwKKyAgICAucGlwZTJpbWVtX2NtZF9vICAgICAgICAgICAgICAgIChjb3JlMmltZW1fY21kX28gICAgICAgICksCisgICAgLnBpcGUyaW1lbV9hZGRyX28gICAgICAgICAgICAgICAoY29yZTJpbWVtX2FkZHJfbyAgICAgICApLAorICAgIC5pbWVtMnBpcGVfcmVxX2Fja19pICAgICAgICAgICAgKGltZW0yY29yZV9yZXFfYWNrX2kgICAgKSwKKyAgICAuaW1lbTJwaXBlX3JkYXRhX2kgICAgICAgICAgICAgIChpbWVtMmNvcmVfcmRhdGFfaSAgICAgICksCisgICAgLmltZW0ycGlwZV9yZXNwX2kgICAgICAgICAgICAgICAoaW1lbTJjb3JlX3Jlc3BfaSAgICAgICApLAorCisgICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCisgICAgLnBpcGUyZG1lbV9yZXFfbyAgICAgICAgICAgICAgICAoY29yZTJkbWVtX3JlcV9vICAgICAgICApLAorICAgIC5waXBlMmRtZW1fY21kX28gICAgICAgICAgICAgICAgKGNvcmUyZG1lbV9jbWRfbyAgICAgICAgKSwKKyAgICAucGlwZTJkbWVtX3dpZHRoX28gICAgICAgICAgICAgIChjb3JlMmRtZW1fd2lkdGhfbyAgICAgICksCisgICAgLnBpcGUyZG1lbV9hZGRyX28gICAgICAgICAgICAgICAoY29yZTJkbWVtX2FkZHJfbyAgICAgICApLAorICAgIC5waXBlMmRtZW1fd2RhdGFfbyAgICAgICAgICAgICAgKGNvcmUyZG1lbV93ZGF0YV9vICAgICAgKSwKKyAgICAuZG1lbTJwaXBlX3JlcV9hY2tfaSAgICAgICAgICAgIChkbWVtMmNvcmVfcmVxX2Fja19pICAgICksCisgICAgLmRtZW0ycGlwZV9yZGF0YV9pICAgICAgICAgICAgICAoZG1lbTJjb3JlX3JkYXRhX2kgICAgICApLAorICAgIC5kbWVtMnBpcGVfcmVzcF9pICAgICAgICAgICAgICAgKGRtZW0yY29yZV9yZXNwX2kgICAgICAgKSwKKworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLy8gRGVidWcgaW50ZXJmYWNlOgorICAgIC5kYmdfZW4gICAgICAgICAgICAgICAgICAgICAgICAgKDEnYjEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAvLyBEZWJ1ZyBpbnRlcmZhY2U6CisgICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIFJ1biBDb250cm9sIGkvZgorICAgIC5kbTJwaXBlX2FjdGl2ZV9pICAgICAgICAgICAgICAgKGRtX2FjdGl2ZSAgICAgICAgICAgICAgKSwKKyAgICAuZG0ycGlwZV9jbWRfcmVxX2kgICAgICAgICAgICAgIChkbV9jbWRfcmVxICAgICAgICAgICAgICksCisgICAgLmRtMnBpcGVfY21kX2kgICAgICAgICAgICAgICAgICAoZG1fY21kICAgICAgICAgICAgICAgICApLAorICAgIC5waXBlMmRtX2NtZF9yZXNwX28gICAgICAgICAgICAgKGRtX2NtZF9yZXNwICAgICAgICAgICAgKSwKKyAgICAucGlwZTJkbV9jbWRfcmNvZGVfbyAgICAgICAgICAgIChkbV9jbWRfcmNvZGUgICAgICAgICAgICksCisgICAgLnBpcGUyZG1faGFydF9ldmVudF9vICAgICAgICAgICAoZG1faGFydF9ldmVudCAgICAgICAgICApLAorICAgIC5waXBlMmRtX2hhcnRfc3RhdHVzX28gICAgICAgICAgKGRtX2hhcnRfc3RhdHVzICAgICAgICAgKSwKKworICAgIC8vIERNIDwtPiBQaXBlbGluZTogUHJvZ3JhbSBCdWZmZXIgLSBIQVJUIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpL2YKKyAgICAucGlwZTJkbV9wYnVmX2FkZHJfbyAgICAgICAgICAgIChkbV9wYnVmX2FkZHIgICAgICAgICAgICksCisgICAgLmRtMnBpcGVfcGJ1Zl9pbnN0cl9pICAgICAgICAgICAoZG1fcGJ1Zl9pbnN0ciAgICAgICAgICApLAorCisgICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIEFic3RyYWN0IERhdGEgcmVncyBpL2YKKyAgICAucGlwZTJkbV9kcmVnX3JlcV9vICAgICAgICAgICAgIChkbV9kcmVnX3JlcSAgICAgICAgICAgICksCisgICAgLnBpcGUyZG1fZHJlZ193cl9vICAgICAgICAgICAgICAoZG1fZHJlZ193ciAgICAgICAgICAgICApLAorICAgIC5waXBlMmRtX2RyZWdfd2RhdGFfbyAgICAgICAgICAgKGRtX2RyZWdfd2RhdGEgICAgICAgICAgKSwKKyAgICAuZG0ycGlwZV9kcmVnX3Jlc3BfaSAgICAgICAgICAgIChkbV9kcmVnX3Jlc3AgICAgICAgICAgICksCisgICAgLmRtMnBpcGVfZHJlZ19mYWlsX2kgICAgICAgICAgICAoZG1fZHJlZ19mYWlsICAgICAgICAgICApLAorICAgIC5kbTJwaXBlX2RyZWdfcmRhdGFfaSAgICAgICAgICAgKGRtX2RyZWdfcmRhdGEgICAgICAgICAgKSwKKworICAgIC8vIERNIDwtPiBQaXBlbGluZTogUEMgaS9mCisgICAgLnBpcGUyZG1fcGNfc2FtcGxlX28gICAgICAgICAgICAoZG1fcGNfc2FtcGxlICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBJUlEKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KKyAgICAuc29jMnBpcGVfaXJxX2xpbmVzX2kgICAgICAgICAgIChjb3JlX2lycV9saW5lc19pICAgICAgICksCitgZWxzZSAvLyBTQ1IxX0lQSUNfRU4KKyAgICAuc29jMnBpcGVfaXJxX2V4dF9pICAgICAgICAgICAgIChjb3JlX2lycV9leHRfaSAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisgICAgLnNvYzJwaXBlX2lycV9zb2Z0X2kgICAgICAgICAgICAoY29yZV9pcnFfc29mdF9pICAgICAgICApLAorICAgIC5zb2MycGlwZV9pcnFfbXRpbWVyX2kgICAgICAgICAgKGNvcmVfaXJxX210aW1lcl9pICAgICAgKSwKKworICAgIC8vIE1lbW9yeS1tYXBwZWQgZXh0ZXJuYWwgdGltZXIKKyAgICAuc29jMnBpcGVfbXRpbWVyX3ZhbF9pICAgICAgICAgIChjb3JlX210aW1lcl92YWxfaSAgICAgICksCisKKyAgICAvLyBGdXNlCisgICAgLnNvYzJwaXBlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAoY29yZV9mdXNlX21oYXJ0aWRfaSAgICApCispOworCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVAgQ29udHJvbGxlciAoVEFQQykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV90YXBjIGlfdGFwYyAoCisgICAgLy8gSlRBRyBzaWduYWxzCisgICAgLnRhcGNfdHJzdF9uICAgICAgICAgICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgICAgICApLAorICAgIC50YXBjX3RjayAgICAgICAgICAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RtcyAgICAgICAgICAgICAgICAgICksCisgICAgLnRhcGNfdGRpICAgICAgICAgICAgICAgICAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgICAgICApLAorICAgIC50YXBjX3RkbyAgICAgICAgICAgICAgICAgICAgICAgKHRhcGNfdGRvICAgICAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgICAgICh0YXBjX3Rkb19lbiAgICAgICAgICAgICAgICksCisKKyAgICAvLyBGdXNlcworICAgIC5zb2MydGFwY19mdXNlX2lkY29kZV9pICAgICAgICAgKHRhcGNfZnVzZV9pZGNvZGVfaSAgICAgICAgKSwKKworICAgIC8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMKKyAgICAudGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28gICAgICh0YXBjX3NjdV9jaF9zZWxfdGFwb3V0ICAgICksCisgICAgLnRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9vICAgICAodGFwY19kbWlfY2hfc2VsX3RhcG91dCAgICApLAorICAgIC50YXBjMnRhcGNzeW5jX2NoX2lkX28gICAgICAgICAgKHRhcGNfZG1pX2NoX2lkX3RhcG91dCAgICAgKSwKKyAgICAudGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX28gICAgICh0YXBjX2RtaV9jaF9jYXB0dXJlX3RhcG91dCksCisgICAgLnRhcGMydGFwY3N5bmNfY2hfc2hpZnRfbyAgICAgICAodGFwY19kbWlfY2hfc2hpZnRfdGFwb3V0ICApLAorICAgIC50YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9vICAgICAgKHRhcGNfZG1pX2NoX3VwZGF0ZV90YXBvdXQgKSwKKyAgICAudGFwYzJ0YXBjc3luY19jaF90ZGlfbyAgICAgICAgICh0YXBjX2RtaV9jaF90ZGlfdGFwb3V0ICAgICksCisgICAgLnRhcGNzeW5jMnRhcGNfY2hfdGRvX2kgICAgICAgICAodGFwY19kbWlfY2hfdGRvX3RhcGluICAgICApCispOworCitzY3IxX3RhcGNfc3luY2hyb25pemVyIGlfdGFwY19zeW5jaHJvbml6ZXIgKAorICAgIC8vIFN5c3RlbSBjb21tb24gc2lnbmFscworICAgIC5wd3J1cF9yc3RfbiAgICAgICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgICAgICAgICAgKSwKKyAgICAuZG1fcnN0X24gICAgICAgICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICAgICApLAorCisgICAgLy8gSlRBRyBjb21tb24gc2lnbmFscworICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCisgICAgLnRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9pICAgICAodGFwY19zY3VfY2hfc2VsX3RhcG91dCAgICApLAorICAgIC50YXBjc3luYzJzY3VfY2hfc2VsX28gICAgICAgICAgKHRhcGNfc2N1X2NoX3NlbCAgICAgICAgICAgKSwKKyAgICAudGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX2kgICAgICh0YXBjX2RtaV9jaF9zZWxfdGFwb3V0ICAgICksCisgICAgLnRhcGNzeW5jMmRtaV9jaF9zZWxfbyAgICAgICAgICAodGFwY19kbWlfY2hfc2VsICAgICAgICAgICApLAorCisgICAgLnRhcGMydGFwY3N5bmNfY2hfaWRfaSAgICAgICAgICAodGFwY19kbWlfY2hfaWRfdGFwb3V0ICAgICApLAorICAgIC50YXBjc3luYzJjb3JlX2NoX2lkX28gICAgICAgICAgKHRhcGNfZG1pX2NoX2lkICAgICAgICAgICAgKSwKKyAgICAudGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX2kgICAgICh0YXBjX2RtaV9jaF9jYXB0dXJlX3RhcG91dCksCisgICAgLnRhcGNzeW5jMmNvcmVfY2hfY2FwdHVyZV9vICAgICAodGFwY19kbWlfY2hfY2FwdHVyZSAgICAgICApLAorICAgIC50YXBjMnRhcGNzeW5jX2NoX3NoaWZ0X2kgICAgICAgKHRhcGNfZG1pX2NoX3NoaWZ0X3RhcG91dCAgKSwKKyAgICAudGFwY3N5bmMyY29yZV9jaF9zaGlmdF9vICAgICAgICh0YXBjX2RtaV9jaF9zaGlmdCAgICAgICAgICksCisgICAgLnRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX2kgICAgICAodGFwY19kbWlfY2hfdXBkYXRlX3RhcG91dCApLAorICAgIC50YXBjc3luYzJjb3JlX2NoX3VwZGF0ZV9vICAgICAgKHRhcGNfZG1pX2NoX3VwZGF0ZSAgICAgICAgKSwKKyAgICAudGFwYzJ0YXBjc3luY19jaF90ZGlfaSAgICAgICAgICh0YXBjX2RtaV9jaF90ZGlfdGFwb3V0ICAgICksCisgICAgLnRhcGNzeW5jMmNvcmVfY2hfdGRpX28gICAgICAgICAodGFwY19kbWlfY2hfdGRpICAgICAgICAgICApLAorICAgIC50YXBjMnRhcGNzeW5jX2NoX3Rkb19pICAgICAgICAgKHRhcGNfZG1pX2NoX3Rkb190YXBpbiAgICAgKSwKKyAgICAudGFwY3N5bmMyY29yZV9jaF90ZG9fbyAgICAgICAgICh0YXBjX2NoX3RkbyAgICAgICAgICAgICAgICkKKyk7Cithc3NpZ24gdGFwY19jaF90ZG8gPSAodGFwY19zY3VfY2hfdGRvICYgdGFwY19zY3VfY2hfc2VsKQorICAgICAgICAgICAgICAgICAgIHwgKHRhcGNfZG1pX2NoX3RkbyAmIHRhcGNfZG1pX2NoX3NlbCk7CisKK3NjcjFfZG1pIGlfZG1pICgKKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKGRtX3JzdF9uICAgICAgICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBUQVAgc2Nhbi1jaGFpbnMKKyAgICAudGFwY3N5bmMyZG1pX2NoX3NlbF9pICAgICAgKHRhcGNfZG1pX2NoX3NlbCAgICApLAorICAgIC50YXBjc3luYzJkbWlfY2hfaWRfaSAgICAgICAodGFwY19kbWlfY2hfaWQgICAgICksCisgICAgLnRhcGNzeW5jMmRtaV9jaF9jYXB0dXJlX2kgICh0YXBjX2RtaV9jaF9jYXB0dXJlKSwKKyAgICAudGFwY3N5bmMyZG1pX2NoX3NoaWZ0X2kgICAgKHRhcGNfZG1pX2NoX3NoaWZ0ICApLAorICAgIC50YXBjc3luYzJkbWlfY2hfdXBkYXRlX2kgICAodGFwY19kbWlfY2hfdXBkYXRlICksCisgICAgLnRhcGNzeW5jMmRtaV9jaF90ZGlfaSAgICAgICh0YXBjX2RtaV9jaF90ZGkgICAgKSwKKyAgICAuZG1pMnRhcGNzeW5jX2NoX3Rkb19vICAgICAgKHRhcGNfZG1pX2NoX3RkbyAgICApLAorCisgICAgLy8gRE1JCisgICAgLmRtMmRtaV9yZXNwX2kgICAgICAgICAgICAgIChkbWlfcmVzcCAgICAgICAgICAgKSwKKyAgICAuZG0yZG1pX3JkYXRhX2kgICAgICAgICAgICAgKGRtaV9yZGF0YSAgICAgICAgICApLAorICAgIC5kbWkyZG1fcmVxX28gICAgICAgICAgICAgICAoZG1pX3JlcSAgICAgICAgICAgICksCisgICAgLmRtaTJkbV93cl9vICAgICAgICAgICAgICAgIChkbWlfd3IgICAgICAgICAgICAgKSwKKyAgICAuZG1pMmRtX2FkZHJfbyAgICAgICAgICAgICAgKGRtaV9hZGRyICAgICAgICAgICApLAorICAgIC5kbWkyZG1fd2RhdGFfbyAgICAgICAgICAgICAoZG1pX3dkYXRhICAgICAgICAgICkKKyk7CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlYnVnIE1vZHVsZSAoRE0pCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBkbV9jbWRfcmVzcF9xbGZ5ICAgID0gZG1fY21kX3Jlc3AgICAmIHskYml0cyhkbV9jbWRfcmVzcCl7aGR1MmRtX3JkY19xbGZ5fX07Cithc3NpZ24gZG1faGFydF9ldmVudF9xbGZ5ICA9IGRtX2hhcnRfZXZlbnQgJiB7JGJpdHMoZG1faGFydF9ldmVudCl7aGR1MmRtX3JkY19xbGZ5fX07Cithc3NpZ24gZG1faGFydF9zdGF0dXNfcWxmeS5kYmdfc3RhdGUgPSBoZHUyZG1fcmRjX3FsZnkgPyBkbV9oYXJ0X3N0YXR1cy5kYmdfc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUOworYXNzaWduIGRtX2hhcnRfc3RhdHVzX3FsZnkuZXhjZXB0ICAgID0gZG1faGFydF9zdGF0dXMuZXhjZXB0OworYXNzaWduIGRtX2hhcnRfc3RhdHVzX3FsZnkuZWJyZWFrICAgID0gZG1faGFydF9zdGF0dXMuZWJyZWFrOworYXNzaWduIGRtX3BidWZfYWRkcl9xbGZ5ICAgPSBkbV9wYnVmX2FkZHIgICYgeyRiaXRzKGRtX3BidWZfYWRkcil7aGR1MmRtX3JkY19xbGZ5fX07Cithc3NpZ24gZG1fZHJlZ19yZXFfcWxmeSAgICA9IGRtX2RyZWdfcmVxICAgJiB7JGJpdHMoZG1fZHJlZ19yZXEpe2hkdTJkbV9yZGNfcWxmeX19OworYXNzaWduIGRtX3BjX3NhbXBsZV9xbGZ5ICAgPSBkbV9wY19zYW1wbGUgICYgeyRiaXRzKGRtX3BjX3NhbXBsZSl7Y29yZTJkbV9yZGNfcWxmeX19OworCitzY3IxX2RtIGlfZG0gKAorICAgIC8vIENvbW1vbiBzaWduYWxzCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChkbV9yc3RfbiAgICAgICAgICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBETSBpbnRlcm5hbCBpbnRlcmZhY2UKKyAgICAuZG1pMmRtX3JlcV9pICAgICAgICAgICAgICAgKGRtaV9yZXEgICAgICAgICAgICAgICAgKSwKKyAgICAuZG1pMmRtX3dyX2kgICAgICAgICAgICAgICAgKGRtaV93ciAgICAgICAgICAgICAgICAgKSwKKyAgICAuZG1pMmRtX2FkZHJfaSAgICAgICAgICAgICAgKGRtaV9hZGRyICAgICAgICAgICAgICAgKSwKKyAgICAuZG1pMmRtX3dkYXRhX2kgICAgICAgICAgICAgKGRtaV93ZGF0YSAgICAgICAgICAgICAgKSwKKyAgICAuZG0yZG1pX3Jlc3BfbyAgICAgICAgICAgICAgKGRtaV9yZXNwICAgICAgICAgICAgICAgKSwKKyAgICAuZG0yZG1pX3JkYXRhX28gICAgICAgICAgICAgKGRtaV9yZGF0YSAgICAgICAgICAgICAgKSwKKworICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKKyAgICAubmRtX3JzdF9uX28gICAgICAgICAgICAgICAgKG5kbV9yc3RfbiAgICAgICAgICAgICAgKSwKKyAgICAuaGFydF9yc3Rfbl9vICAgICAgICAgICAgICAgKGhhcnRfcnN0X24gICAgICAgICAgICAgKSwKKyAgICAuZG0ycGlwZV9hY3RpdmVfbyAgICAgICAgICAgKGRtX2FjdGl2ZSAgICAgICAgICAgICAgKSwKKyAgICAuZG0ycGlwZV9jbWRfcmVxX28gICAgICAgICAgKGRtX2NtZF9yZXEgICAgICAgICAgICAgKSwKKyAgICAuZG0ycGlwZV9jbWRfbyAgICAgICAgICAgICAgKGRtX2NtZCAgICAgICAgICAgICAgICAgKSwKKyAgICAucGlwZTJkbV9jbWRfcmVzcF9pICAgICAgICAgKGRtX2NtZF9yZXNwX3FsZnkgICAgICAgKSwKKyAgICAucGlwZTJkbV9jbWRfcmNvZGVfaSAgICAgICAgKGRtX2NtZF9yY29kZSAgICAgICAgICAgKSwKKyAgICAucGlwZTJkbV9oYXJ0X2V2ZW50X2kgICAgICAgKGRtX2hhcnRfZXZlbnRfcWxmeSAgICAgKSwKKyAgICAucGlwZTJkbV9oYXJ0X3N0YXR1c19pICAgICAgKGRtX2hhcnRfc3RhdHVzX3FsZnkgICAgKSwKKworICAgIC5zb2MyZG1fZnVzZV9taGFydGlkX2kgICAgICAoY29yZV9mdXNlX21oYXJ0aWRfaSAgICApLAorICAgIC5waXBlMmRtX3BjX3NhbXBsZV9pICAgICAgICAoZG1fcGNfc2FtcGxlX3FsZnkgICAgICApLAorCisgICAgLy8gRE0gPC0+IFBpcGVsaW5lOiBIQVJUIEFic3RyYWN0IENvbW1hbmQgLyBQcm9ncmFtIEJ1ZmZlciBpL2YKKyAgICAucGlwZTJkbV9wYnVmX2FkZHJfaSAgICAgICAgKGRtX3BidWZfYWRkcl9xbGZ5ICAgICAgKSwKKyAgICAuZG0ycGlwZV9wYnVmX2luc3RyX28gICAgICAgKGRtX3BidWZfaW5zdHIgICAgICAgICAgKSwKKworICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBBYnN0cmFjdCBEYXRhIHJlZ3MgaS9mCisgICAgLnBpcGUyZG1fZHJlZ19yZXFfaSAgICAgICAgIChkbV9kcmVnX3JlcV9xbGZ5ICAgICAgICksCisgICAgLnBpcGUyZG1fZHJlZ193cl9pICAgICAgICAgIChkbV9kcmVnX3dyICAgICAgICAgICAgICksCisgICAgLnBpcGUyZG1fZHJlZ193ZGF0YV9pICAgICAgIChkbV9kcmVnX3dkYXRhICAgICAgICAgICksCisgICAgLmRtMnBpcGVfZHJlZ19yZXNwX28gICAgICAgIChkbV9kcmVnX3Jlc3AgICAgICAgICAgICksCisgICAgLmRtMnBpcGVfZHJlZ19mYWlsX28gICAgICAgIChkbV9kcmVnX2ZhaWwgICAgICAgICAgICksCisgICAgLmRtMnBpcGVfZHJlZ19yZGF0YV9vICAgICAgIChkbV9kcmVnX3JkYXRhICAgICAgICAgICkKKyk7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworCitgaWZkZWYgU0NSMV9DTEtDVFJMX0VOCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2JhbCBjbG9jayBnYXRpbmcgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9jbGtfY3RybCBpX2Nsa19jdHJsICgKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICksCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAoY29yZV9yc3RfbiApLAorICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICksCisKKyAgICAvLyBTbGVlcC93YWtlIGludGVyZmFjZQorICAgIC5waXBlMmNsa2N0bF9zbGVlcF9yZXFfaSAgICAgICAgKHNsZWVwX3BpcGUgKSwKKyAgICAucGlwZTJjbGtjdGxfd2FrZV9yZXFfaSAgICAgICAgICh3YWtlX3BpcGUgICksCisKKyAgICAvLyBDbG9ja3MKKyAgICAuY2xrY3RsMnBpcGVfY2xrX2Fsd19vbl9vICAgICAgIChjbGtfYWx3X29uICksCisgICAgLmNsa2N0bDJwaXBlX2Nsa19vICAgICAgICAgICAgICAoY2xrX3BpcGUgICApLAorICAgIC5jbGtjdGwycGlwZV9jbGtfZW5fbyAgICAgICAgICAgKGNsa19waXBlX2VuKSwKKyAgICAuY2xrY3RsMnBpcGVfY2xrX2RiZ2NfbyAgICAgICAgIChjbGtfZGJnYyAgICkKKyk7CitgZW5kaWYgLy8gU0NSMV9DTEtDVFJMX0VOCisKK2VuZG1vZHVsZSA6IHNjcjFfY29yZV90b3AKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfZG0uc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmQyNTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2RtLnN2CkBAIC0wLDAgKzEsMTQyNyBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9kbS5zdj4KKy8vLyBAYnJpZWYgICAgICBEZWJ1ZyBNb2R1bGUgKERNKQorLy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8KKyAvLyBGdW5jdGlvbmFsaXR5OgorIC8vIC0gQWxsb3dzIGRlYnVnZ2VyIHRvIHBlcmZvcm0gYSBzeXN0ZW0gcmVzZXQgKG5kbV9yc3QpCisgLy8gLSBBbGxvd3MgZGVidWdnZXIgdG8gY29udHJvbCB0aGUgSEFSVCdzIHN0YXRlCisgLy8gLSBQcm92aWRlcyBkZWJ1Z2dlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IEhBUlQncyBzdGF0ZQorIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBBYnN0cmFjdCBDb21tYW5kIGludGVyZmFjZSB0aGF0IGFsbG93cyB0bzoKKyAvLyAgIC0gQWNjZXNzIE1QUkYgcmVnaXN0ZXJzCisgLy8gICAtIEFjY2VzcyBDU1IgcmVnaXN0ZXJzCisgLy8gICAtIEFjY2VzcyBtZW1vcnkgd2l0aCB0aGUgc2FtZSB2aWV3IGFuZCBwZXJtaXNzaW9uIGFzIHRoZSBoYXJ0IGhhcworIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBBYnN0cmFjdCBDb21tYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiAoYnVzeSBmbGFnIGFuZCBlcnJvciBjb2RlKQorIC8vIC0gUHJvdmlkZXMgZGVidWdnZXIgd2l0aCBQcm9ncmFtIEJ1ZmZlciBmdW5jdGlvbmFsaXR5IHRoYXQgYWxsb3dzIHRvIGV4ZWN1dGUKKyAvLyAgIHNtYWxsIHByb2dyYW1zIG9uIGEgaGFsdGVkIEhBUlQKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIERNIDwtPiBETUkgaW50ZXJmYWNlCisgLy8gLSBETSByZWdpc3RlcnM6CisgLy8gICAtIERNQ09OVFJPTAorIC8vICAgLSBETVNUQVRVUworIC8vIC0gQWJzdHJhY3QgQ29tbWFuZCBDb250cm9sIGxvZ2ljCisgLy8gLSBBYnN0cmFjdCBDb21tYW5kIEZTTQorIC8vIC0gQWJzdHJhY3QgQ29tbWFuZCBTdGF0dXMgbG9naWMKKyAvLyAtIEFic3RyYWN0IEluc3RydWN0aW9uIGxvZ2ljCisgLy8gLSBBYnN0cmFjdCByZWdpc3RlcnM6CisgLy8gICAtIENPTU1BTkQKKyAvLyAgIC0gQUJTVFJBQ1RBVVRPCisgLy8gICAtIFBST0dCVUYwLi41CisgLy8gICAtIERBVEEwLi4xCisgLy8gLSBESEkgRlNNCisgLy8gLSBIQVJUIGNvbW1hbmQgcmVnaXN0ZXJzCisgLy8gLSBESEkgaW50ZXJmYWNlCisgLy8KKy8vCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX2Nzci5zdmgiCitgaW5jbHVkZSAic2NyMV9kbS5zdmgiCisKK21vZHVsZSBzY3IxX2RtICgKKyAgICAvLyBTeXN0ZW0KKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gRE0gcmVzZXQKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gRE0gY2xvY2sKKworICAgIC8vIERNIGludGVybmFsIGludGVyZmFjZQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV9yZXFfaSwgICAgICAgICAgICAgICAvLyBETUkgcmVxdWVzdAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJkbV93cl9pLCAgICAgICAgICAgICAgICAvLyBETUkgd3JpdGUKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9BRERSX1dJRFRILTE6MF0gICAgICBkbWkyZG1fYWRkcl9pLCAgICAgICAgICAgICAgLy8gRE1JIGFkZHJlc3MKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9EQVRBX1dJRFRILTE6MF0gICAgICBkbWkyZG1fd2RhdGFfaSwgICAgICAgICAgICAgLy8gRE1JIHdyaXRlIGRhdGEKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJkbWlfcmVzcF9vLCAgICAgICAgICAgICAgLy8gRE1JIHJlc3BvbnNlCisgICAgb3V0cHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgZG0yZG1pX3JkYXRhX28sICAgICAgICAgICAgIC8vIERNSSByZWFkIGRhdGEKKworICAgIC8vIERNIDwtPiBQaXBlbGluZTogSEFSVCBSdW4gQ29udHJvbCBpL2YKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZG1fcnN0X25fbywgICAgICAgICAgICAgICAgLy8gTm9uLURNIFJlc2V0IG91dHB1dAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfcnN0X25fbywgICAgICAgICAgICAgICAvLyBIQVJUIHJlc2V0IG91dHB1dAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfYWN0aXZlX28sICAgICAgICAgICAvLyBEZWJ1ZyBNb2R1bGUgYWN0aXZlIGZsYWcKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2NtZF9yZXFfbywgICAgICAgICAgLy8gUmVxdWVzdCB0byBwaXBlCisgICAgb3V0cHV0IHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgZG0ycGlwZV9jbWRfbywgICAgICAgICAgICAgIC8vIENvbW1hbmQgdG8gcGlwZQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fY21kX3Jlc3BfaSwgICAgICAgICAvLyBSZXNwb25zZSB0byBEZWJ1ZyBNb2R1bGUKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2NtZF9yY29kZV9pLCAgICAgICAgLy8gSEFSVCBDb21tYW5kIHJldHVybiBjb2RlOiAwIC0gT2s7IDEgLSBFcnJvcgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1faGFydF9ldmVudF9pLCAgICAgICAvLyBIQVJUIGV2ZW50IGZsYWcKKyAgICBpbnB1dCAgdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3MgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfc3RhdHVzX2ksICAgICAgLy8gSEFSVCBTdGF0dXMKKworICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgIHNvYzJkbV9mdXNlX21oYXJ0aWRfaSwgICAgICAvLyBSTyBNSEFSVElEIHZhbHVlCisgICAgaW5wdXQgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgcGlwZTJkbV9wY19zYW1wbGVfaSwgICAgICAgIC8vIFJPIFBDIHZhbHVlIGZvciBzYW1wbGluZworCisgICAgLy8gSEFSVCBBYnN0cmFjdCBDb21tYW5kIC8gUHJvZ3JhbSBCdWZmZXIgaS9mCisgICAgaW5wdXQgIGxvZ2ljIFtTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEgtMTowXSAgICAgcGlwZTJkbV9wYnVmX2FkZHJfaSwgICAgICAgIC8vIFByb2dyYW0gQnVmZmVyIGFkZHJlc3MKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfSERVX0NPUkVfSU5TVFJfV0lEVEgtMTowXSAgICBkbTJwaXBlX3BidWZfaW5zdHJfbywgICAgICAgLy8gUHJvZ3JhbSBCdWZmZXIgaW5zdHJ1Y3Rpb24KKworICAgIC8vIEhBUlQgQWJzdHJhY3QgRGF0YSByZWdzIGkvZgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ19yZXFfaSwgICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHJlcXVlc3QKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfd3JfaSwgICAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciB3cml0ZQorICAgIGlucHV0ICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgIHBpcGUyZG1fZHJlZ193ZGF0YV9pLCAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIHdyaXRlIGRhdGEKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmVzcF9vLCAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZXNwb25zZQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtMnBpcGVfZHJlZ19mYWlsX28sICAgICAgICAvLyBBYnN0cmFjdCBEYXRhIFJlZ2lzdGVyIGZhaWwgLSBwb3NzaWJseSBub3QgbmVlZGVkID8KKyAgICBvdXRwdXQgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICBkbTJwaXBlX2RyZWdfcmRhdGFfbyAgICAgICAgLy8gQWJzdHJhY3QgRGF0YSBSZWdpc3RlciByZWFkIGRhdGEKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCB0eXBlcyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHlwZWRlZiBlbnVtIGxvZ2ljIFszOjBdIHsKKyAgICBBQlNfU1RBVEVfSURMRSwKKyAgICBBQlNfU1RBVEVfRVJSLAorICAgIEFCU19TVEFURV9FWEVDLAorICAgIEFCU19TVEFURV9YUkVHX1JXLAorICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHLAorICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIsCisgICAgQUJTX1NUQVRFX01FTV9SVywKKyAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHLAorICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUiwKKyAgICBBQlNfU1RBVEVfQ1NSX1JPLAorICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHLAorICAgIEFCU19TVEFURV9DU1JfUlcsCisgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRworfSB0eXBlX3NjcjFfYWJzX2ZzbV9lOworCit0eXBlZGVmIGVudW0gbG9naWMgWzI6MF0geworICAgIERISV9TVEFURV9JRExFLAorICAgIERISV9TVEFURV9FWEVDLAorICAgIERISV9TVEFURV9FWEVDX1JVTiwKKyAgICBESElfU1RBVEVfRVhFQ19IQUxULAorICAgIERISV9TVEFURV9IQUxUX1JFUSwKKyAgICBESElfU1RBVEVfUkVTVU1FX1JFUSwKKyAgICBESElfU1RBVEVfUkVTVU1FX1JVTgorfSB0eXBlX3NjcjFfZGhpX2ZzbV9lOworCit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEg6MF0geworICAgIEFCU19FUlJfTk9ORSAgICAgID0gKFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEgrMSknKCdkMCksCisgICAgQUJTX0VSUl9CVVNZICAgICAgPSAoU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCsxKScoJ2QxKSwKKyAgICBBQlNfRVJSX0NNRCAgICAgICA9IChTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9XRFRIKzEpJygnZDIpLAorICAgIEFCU19FUlJfRVhDRVBUSU9OID0gKFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEgrMSknKCdkMyksCisgICAgQUJTX0VSUl9OT0hBTFQgICAgPSAoU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfV0RUSCsxKScoJ2Q0KQorfSB0eXBlX3NjcjFfYWJzX2Vycl9lOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBvcGNvZGUgcGFyYW1ldGVycworbG9jYWxwYXJhbSAgICAgIFNDUjFfT1BfU1lTVEVNICAgICAgPSA3J2IxMTFfMDAxMTsKK2xvY2FscGFyYW0gICAgICBTQ1IxX09QX0xPQUQgICAgICAgID0gNydiMDAwXzAwMTE7Citsb2NhbHBhcmFtICAgICAgU0NSMV9PUF9TVE9SRSAgICAgICA9IDcnYjAxMF8wMDExOworCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBmdW5jdDMgcGFyYW1ldGVycworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX0NTUlJXICAgICAgID0gMydiMDAxOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX0NTUlJTICAgICAgID0gMydiMDEwOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX1NCICAgICAgICAgID0gMydiMDAwOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX1NIICAgICAgICAgID0gMydiMDAxOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX1NXICAgICAgICAgID0gMydiMDEwOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX0xXICAgICAgICAgID0gMydiMDEwOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX0xCVSAgICAgICAgID0gMydiMTAwOworbG9jYWxwYXJhbSAgICAgIFNDUjFfRlVOQ1QzX0xIVSAgICAgICAgID0gMydiMTAxOworCisvLyBETUNPTlRST0wgcGFyYW1ldGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gICAgICBETUNPTlRST0xfSEFSVFJFU0VUICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX1JFU0VSVkVEQiAgICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9IQVNFTCAgICAgICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBETUNPTlRST0xfSEFSVFNFTExPICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgRE1DT05UUk9MX0hBUlRTRUxISSAgICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIERNQ09OVFJPTF9SRVNFUlZFREEgICAgID0gMSdkMDsKKworLy8gRE1TVEFUVVMgcGFyYW1ldGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gICAgICBETVNUQVRVU19SRVNFUlZFREMgICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfSU1QRUJSRUFLICAgICAgPSAxJ2QxOworbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX1JFU0VSVkVEQiAgICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBETVNUQVRVU19BTExVTkFWQUlMICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQU5ZVU5BVkFJTCAgICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FMTEFOWVVOQVZBSUwgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBETVNUQVRVU19BTExBTllOT05FWElTVCA9IDEnYjA7Citsb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfQVVUSEVOVElDQVRFRCAgPSAxJ2QxOworbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX0FVVEhCVVNZICAgICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBETVNUQVRVU19SRVNFUlZFREEgICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgRE1TVEFUVVNfREVWVFJFRVZBTElEICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIERNU1RBVFVTX1ZFUlNJT04gICAgICAgID0gMidkMjsKKworLy8gSEFSVElORk8gcGFyYW1ldGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gICAgICBIQVJUSU5GT19SRVNFUlZFREIgICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgSEFSVElORk9fTlNDUkFUQ0ggICAgICAgPSA0J2QxOworbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX1JFU0VSVkVEQSAgICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBIQVJUSU5GT19EQVRBQUNDRVNTICAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgSEFSVElORk9fREFUQVNJWkUgICAgICAgPSA0J2QxOworbG9jYWxwYXJhbSAgICAgIEhBUlRJTkZPX0RBVEFBRERSICAgICAgID0gMTInaDdiMjsKKworLy8gQUJTVFJBQ1RDUyBwYXJhbWV0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfUkVTRVJWRUREICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX1BST0dCVUZTSVpFICA9IDUnZDY7Citsb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19SRVNFUlZFREMgICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIEFCU1RSQUNUQ1NfUkVTRVJWRURCICAgID0gMSdkMDsKK2xvY2FscGFyYW0gICAgICBBQlNUUkFDVENTX1JFU0VSVkVEQSAgICA9IDEnZDA7Citsb2NhbHBhcmFtICAgICAgQUJTVFJBQ1RDU19EQVRBQ09VTlQgICAgPSA0J2QyOworCitsb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUUkVHICAgICAgICAgPSAxJ2QwOworbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVE1FTSAgICAgICAgID0gMidkMjsKK2xvY2FscGFyYW0gICAgICBBQlNfQ01EX0hBUlRSRUdfQ1NSICAgICA9IDQnYjAwMDA7Citsb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUUkVHX0lOVEZQVSAgPSA0J2IwMDAxOworbG9jYWxwYXJhbSAgICAgIEFCU19DTURfSEFSVFJFR19JTlQgICAgID0gNydiMDAwXzAwMDA7Citsb2NhbHBhcmFtICAgICAgQUJTX0NNRF9IQVJUUkVHX0ZQVSAgICAgPSA3J2IwMDBfMDAwMTsKK2xvY2FscGFyYW0gICAgICBBQlNfRVhFQ19FQlJFQUsgICAgICAgICA9IDMyJ2IwMDAwMDAwMDAwMDFfMDAwMDBfMDAwXzAwMDAwXzExMTAwMTE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBETSA8LT4gRE1JIGludGVyZmFjZSBpbnRlcm5hbCBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWdpc3RlciBzZWxlY3Rpb24gc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2RtY29udHJvbDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9hYnN0cmFjdGNzOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcmVxX2Fic3RyYWN0YXV0bzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9jb21tYW5kOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlfcnB0X2NvbW1hbmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfZGF0YTA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfZGF0YTE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjI7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaV9yZXFfcHJvZ2J1ZjU7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pX3JlcV9hbnk7CisKKy8vIFJlZ2lzdGVycyB3cml0ZSByZXF1ZXN0IHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc193cl9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEwX3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTFfd3JfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmVnX3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF93cl9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9leGVjX3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjBfd3JfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmMV93cl9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWYyX3dyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2J1ZjNfd3JfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nYnVmNF93cl9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2didWY1X3dyX3JlcTsKKworLy8gRE0gcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBETSBjbG9jayBlbmFibGUgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfZW5fZG07Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19lbl9kbV9mZjsKKworLy8gRE1DT05UUk9MIHJlZ2lzdGVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9oYWx0cmVxX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtY29udHJvbF9kbWFjdGl2ZV9uZXh0OworCisvLyBBdXhpbGFyeSBTa2lwIFJlc2V0IE9uIFBvd2VydXAgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZXJlc2V0X3NraXBfcHdydXBfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVyZXNldF9za2lwX3B3cnVwX25leHQ7CisKKy8vIERNU1RBVFVTIHJlZ2lzdGVyIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfbmV4dDsKKworLy8gQWJzdHJhY3QgY29tbWFuZCBjb250cm9sIGxvZ2ljIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgICAgICAgICAgYWJzX2NtZDsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9ybzsKK2xvZ2ljIFtTQ1IxX0RCR19DT01NQU5EX1RZUEVfV0RUSDowXSAgICAgICAgICAgICAgYWJzX2NtZF90eXBlOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ2FjczsKK2xvZ2ljIFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRUdOT19ISS0xMjowXSAgYWJzX2NtZF9yZWd0eXBlOworbG9naWMgWzY6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ2ZpbGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnd3I7Citsb2dpYyBbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9XRFRIOjBdICAgIGFic19jbWRfcmVnc2l6ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9leGVjcHJvZ2J1ZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWd2YWxpZDsKK2xvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW1zaXplOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbXdyOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21lbXZhbGlkOworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcmVnc2l6ZV92ZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tZW1zaXplX3ZkOworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfd3JfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfd3JfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19uZXh0OworbG9naWMgWzExOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ25vOworbG9naWMgWzExOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ25vX2ZmOworbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3NpemVfZmY7Citsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfc2l6ZV9uZXh0OworCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19yZWdfYWNjZXNzX2NzcjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3JlZ19hY2Nlc3NfbXByZjsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2hhcnRyZWdfdmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfaGFydG1lbV92ZDsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3JlZ19hY2Nlc3NfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9hY2Nlc3NfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21wcmZfYWNjZXNzX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9leGVjcHJvZ2J1Zl9yZXE7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3Jfcm9fYWNjZXNzX3ZkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kX2Nzcl9yd19hY2Nlc3NfdmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbXByZl9hY2Nlc3NfdmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtX2FjY2Vzc192ZDsKKworLy8gQWJzdHJhY3QgRlNNIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVfc2NyMV9hYnNfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9mZjsKK3R5cGVfc2NyMV9hYnNfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9uZXh0OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX2lkbGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fZXhlYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9jc3Jfcm87Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19mc21fZXJyOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX3VzZV9hZGRyOworCisvLyBBYnN0cmFjdCByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX2VuX2FiczsKKworLy8gQUJTVFJBQ1RDUyByZWdpc3RlciBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfYnVzeTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19yb19lbjsKKworLy8gQ09NTUFORCByZWdpc3RlciBzaWduYWxzCitsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jb21tYW5kX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY29tbWFuZF9uZXh0OworCisvLyBBQlNUUkFDVEFVVE8gcmVnaXN0ZXIgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfYXV0b2V4ZWNfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19hdXRvZXhlY19uZXh0OworCisvLyBQcm9ncmFtIGJ1ZmZlciByZWdpc3RlcnMKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWYwX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjFfZmY7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmMl9mZjsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3Byb2didWYzX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcHJvZ2J1ZjRfZmY7Citsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wcm9nYnVmNV9mZjsKKworLy8gRGF0YSAwLzEgcmVnaXN0ZXJzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEwX3hyZWdfc2F2ZTsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2RhdGEwX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZGF0YTBfbmV4dDsKK2xvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2RhdGExX2ZmOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZGF0YTFfbmV4dDsKKworLy8gQWJzdHJhY3QgY29tbWFuZCBzdGF0dXMgbG9naWMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQWJzdHJhY3QgZXJyb3IgZXhjZXB0aW9uIGZsYWcgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfdXBkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y19mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfbmV4dDsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X3VwZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9uZXh0OworCit0eXBlX3NjcjFfYWJzX2Vycl9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX2ZmOwordHlwZV9zY3IxX2Fic19lcnJfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0OworCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBleGVjdXRpb24gcmVxdWVzdCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXhlY19yZXFfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2V4ZWNfcmVxX2ZmOworCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiByZWdpc3RlcgorbG9naWMgWzQ6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfaW5zdHJfcmQ7Citsb2dpYyBbNDowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19pbnN0cl9yczE7Citsb2dpYyBbNDowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19pbnN0cl9yczI7Citsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19pbnN0cl9tZW1fZnVuY3QzOworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXhlY19pbnN0cl9uZXh0OworbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXhlY19pbnN0cl9mZjsKKworLy8gREhJIEZTTSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0eXBlX3NjcjFfZGhpX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21fbmV4dDsKK3R5cGVfc2NyMV9kaGlfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9mZjsKK3R5cGVfc2NyMV9kaGlfZnNtX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX3JlcTsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGlfZnNtX2lkbGU7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21fZXhlYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX2ZzbV9leGVjX2hhbHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21faGFsdF9yZXE7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9mc21fcmVzdW1lX3JlcTsKKworLy8gREhJIGludGVyZmFjZSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9yZXNwX29rOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3JzdF91bmV4cDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdF9yZXFfdmQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZV9yZXFfdmQ7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhpX3Jlc3A7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoaV9yZXNwX2V4YzsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3BidWZfZWJyZWFrX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3BidWZfZWJyZWFrX25leHQ7CisKKy8vIEhBUlQgY29tbWFuZCByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9jbWRfcmVxX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2NtZF9yZXFfbmV4dDsKKwordHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZSAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X2NtZF9mZjsKK3R5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgICAgICAgICAgICAgICAgaGFydF9jbWRfbmV4dDsKKworLy8gSEFSVCBzdGF0ZSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfc3RhdGVfcmVzZXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfc3RhdGVfcnVuOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJ0X3N0YXRlX2RydW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcnRfc3RhdGVfZGhhbHQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBETSA8LT4gRE1JIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVnaXN0ZXIgc2VsZWN0aW9uIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGRtaV9yZXFfZG1jb250cm9sICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfRE1DT05UUk9MKTsKKyAgICBkbWlfcmVxX2Fic3RyYWN0Y3MgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0FCU1RSQUNUQ1MpOworICAgIGRtaV9yZXFfYWJzdHJhY3RhdXRvID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfQUJTVFJBQ1RBVVRPKTsKKyAgICBkbWlfcmVxX2RhdGEwICAgICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0RBVEEwKTsKKyAgICBkbWlfcmVxX2RhdGExICAgICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0RBVEExKTsKKyAgICBkbWlfcmVxX2NvbW1hbmQgICAgICA9IGRtaTJkbV9yZXFfaSAmIChkbWkyZG1fYWRkcl9pID09IFNDUjFfREJHX0NPTU1BTkQpOworICAgIGRtaV9ycHRfY29tbWFuZCAgICAgID0gKGFic19hdXRvZXhlY19mZiAmIGRtaV9yZXFfZGF0YTApOworICAgIGRtaV9yZXFfcHJvZ2J1ZjAgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjApOworICAgIGRtaV9yZXFfcHJvZ2J1ZjEgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjEpOworICAgIGRtaV9yZXFfcHJvZ2J1ZjIgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjIpOworICAgIGRtaV9yZXFfcHJvZ2J1ZjMgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjMpOworICAgIGRtaV9yZXFfcHJvZ2J1ZjQgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjQpOworICAgIGRtaV9yZXFfcHJvZ2J1ZjUgICAgID0gZG1pMmRtX3JlcV9pICYgKGRtaTJkbV9hZGRyX2kgPT0gU0NSMV9EQkdfUFJPR0JVRjUpOworZW5kCisKK2Fzc2lnbiBkbWlfcmVxX2FueSA9IGRtaV9yZXFfY29tbWFuZCAgfCBkbWlfcnB0X2NvbW1hbmQgIHwgZG1pX3JlcV9hYnN0cmFjdGF1dG8KKyAgICAgICAgICAgICAgICAgICB8IGRtaV9yZXFfZGF0YTAgICAgfCBkbWlfcmVxX2RhdGExICAgIHwgZG1pX3JlcV9wcm9nYnVmMAorICAgICAgICAgICAgICAgICAgIHwgZG1pX3JlcV9wcm9nYnVmMSB8IGRtaV9yZXFfcHJvZ2J1ZjIgfCBkbWlfcmVxX3Byb2didWYzCisgICAgICAgICAgICAgICAgICAgfCBkbWlfcmVxX3Byb2didWY0IHwgZG1pX3JlcV9wcm9nYnVmNTsKKworCisvLyBSZWFkIGRhdGEgbXVsdGlwbGV4ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZG0yZG1pX3JkYXRhX28gPSAnMDsKKworICAgIGNhc2UgKGRtaTJkbV9hZGRyX2kpCisgICAgICAgIFNDUjFfREJHX0RNU1RBVFVTOiBiZWdpbgorICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURDX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURDX0xPXSAgICAgPSBETVNUQVRVU19SRVNFUlZFREM7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19JTVBFQlJFQUtdICAgICAgICA9IERNU1RBVFVTX0lNUEVCUkVBSzsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNU1RBVFVTX1JFU0VSVkVEQl9MT10gICAgID0gRE1TVEFUVVNfUkVTRVJWRURCOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMSEFWRVJFU0VUXSAgICAgPSBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZSEFWRVJFU0VUXSAgICAgPSBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMUkVTVU1FQUNLXSAgICAgPSBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZUkVTVU1FQUNLXSAgICAgPSBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQUxMTk9ORVhJU1RFTlRdICAgPSBETVNUQVRVU19BTExBTllOT05FWElTVDsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWU5PTkVYSVNURU5UXSAgID0gRE1TVEFUVVNfQUxMQU5ZTk9ORVhJU1Q7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExVTkFWQUlMXSAgICAgICA9IERNU1RBVFVTX0FMTEFOWVVOQVZBSUw7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTllVTkFWQUlMXSAgICAgICA9IERNU1RBVFVTX0FMTEFOWVVOQVZBSUw7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19BTExSVU5OSU5HXSAgICAgICA9IH5kbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfQU5ZUlVOTklOR10gICAgICAgPSB+ZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FMTEhBTFRFRF0gICAgICAgID0gZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FOWUhBTFRFRF0gICAgICAgID0gZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9mZjsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FVVEhFTlRJQ0FURURdICAgID0gRE1TVEFUVVNfQVVUSEVOVElDQVRFRDsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0FVVEhCVVNZXSAgICAgICAgID0gRE1TVEFUVVNfQVVUSEJVU1k7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREFdICAgICAgICA9IERNU1RBVFVTX1JFU0VSVkVEQTsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNU1RBVFVTX0RFVlRSRUVWQUxJRF0gICAgID0gRE1TVEFUVVNfREVWVFJFRVZBTElEOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1TVEFUVVNfVkVSU0lPTl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNU1RBVFVTX1ZFUlNJT05fTE9dICAgICAgID0gRE1TVEFUVVNfVkVSU0lPTjs7CisgICAgICAgIGVuZAorCisgICAgICAgIFNDUjFfREJHX0RNQ09OVFJPTDogYmVnaW4KKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9IQUxUUkVRXSAgICAgICAgID0gZG1jb250cm9sX2hhbHRyZXFfZmY7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfUkVTVU1FUkVRXSAgICAgICA9IGRtY29udHJvbF9yZXN1bWVyZXFfZmY7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFJFU0VUXSAgICAgICA9IERNQ09OVFJPTF9IQVJUUkVTRVQ7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfQUNLSEFWRVJFU0VUXSAgICA9IGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmY7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURCXSAgICAgICA9IERNQ09OVFJPTF9SRVNFUlZFREI7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfSEFTRUxdICAgICAgICAgICA9IERNQ09OVFJPTF9IQVNFTDsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMTE9fSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTExPX0xPXSAgICA9IERNQ09OVFJPTF9IQVJUU0VMTE87CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTEhJX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxISV9MT10gICAgPSBETUNPTlRST0xfSEFSVFNFTEhJOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX1JFU0VSVkVEQV9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNQ09OVFJPTF9SRVNFUlZFREFfTE9dICAgID0gRE1DT05UUk9MX1JFU0VSVkVEQTsKKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0RNQ09OVFJPTF9ORE1SRVNFVF0gICAgICAgID0gZG1jb250cm9sX25kbXJlc2V0X2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfRE1DT05UUk9MX0RNQUNUSVZFXSAgICAgICAgPSBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7CisgICAgICAgIGVuZAorCisgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1M6IGJlZ2luCisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVERF9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRUREX0xPXSAgID0gQUJTVFJBQ1RDU19SRVNFUlZFREQ7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX1BST0dCVUZTSVpFX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQUJTVFJBQ1RDU19QUk9HQlVGU0laRV9MT10gPSBBQlNUUkFDVENTX1BST0dCVUZTSVpFOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRENfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQ19MT10gICA9IEFCU1RSQUNUQ1NfUkVTRVJWRURDOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19CVVNZXSAgICAgICAgICAgPSBhYnN0cmFjdGNzX2J1c3k7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQl0gICAgICA9IEFCU1RSQUNUQ1NfUkVTRVJWRURCOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9MT10gICAgICA9IGFic3RyYWN0Y3NfY21kZXJyX2ZmOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFREFfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9MT10gICA9IEFCU1RSQUNUQ1NfUkVTRVJWRURBOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfQUJTVFJBQ1RDU19EQVRBQ09VTlRfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9MT10gICA9IEFCU1RSQUNUQ1NfREFUQUNPVU5UOworICAgICAgICBlbmQKKworICAgICAgICBTQ1IxX0RCR19IQVJUSU5GTzogYmVnaW4KKyAgICAgICAgICAgIGRtMmRtaV9yZGF0YV9vW1NDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQl9MT10gICAgID0gSEFSVElORk9fUkVTRVJWRURCOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fTlNDUkFUQ0hfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19IQVJUSU5GT19OU0NSQVRDSF9MT10gICAgICA9IEhBUlRJTkZPX05TQ1JBVENIOworICAgICAgICAgICAgZG0yZG1pX3JkYXRhX29bU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURBX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURBX0xPXSAgICAgPSBIQVJUSU5GT19SRVNFUlZFREE7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUNDRVNTXSAgICAgICA9IEhBUlRJTkZPX0RBVEFBQ0NFU1M7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19EQVRBU0laRV9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFTSVpFX0xPXSAgICAgID0gSEFSVElORk9fREFUQVNJWkU7CisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfb1tTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUREUl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFBRERSX0xPXSAgICAgID0gSEFSVElORk9fREFUQUFERFI7CisgICAgICAgIGVuZAorCisgICAgICAgIFNDUjFfREJHX0FCU1RSQUNUQVVUTzogZG0yZG1pX3JkYXRhX29bMF0gPSBhYnNfYXV0b2V4ZWNfZmY7CisgICAgICAgIFNDUjFfREJHX0RBVEEwICAgICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfZGF0YTBfZmY7CisgICAgICAgIFNDUjFfREJHX0RBVEExICAgICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfZGF0YTFfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUYwICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjBfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUYxICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjFfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUYyICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjJfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUYzICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjNfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUY0ICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjRfZmY7CisgICAgICAgIFNDUjFfREJHX1BST0dCVUY1ICAgIDogZG0yZG1pX3JkYXRhX28gICAgPSBhYnNfcHJvZ2J1ZjVfZmY7CisgICAgICAgIFNDUjFfREJHX0hBTFRTVU0wICAgIDogZG0yZG1pX3JkYXRhX29bMF0gPSBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmOworCisgICAgICAgIGRlZmF1bHQ6IGJlZ2luCisgICAgICAgICAgICBkbTJkbWlfcmRhdGFfbyA9ICcwOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8gUmVzcG9uc2UKK2Fzc2lnbiBkbTJkbWlfcmVzcF9vID0gMSdiMTsKKworLy8gV3JpdGUgcmVxdWVzdHMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGRtY29udHJvbF93cl9yZXEgID0gZG1pX3JlcV9kbWNvbnRyb2wgICAgJiBkbWkyZG1fd3JfaTsKK2Fzc2lnbiBkYXRhMF93cl9yZXEgICAgICA9IGRtaV9yZXFfZGF0YTAgICAgICAgICYgZG1pMmRtX3dyX2k7Cithc3NpZ24gZGF0YTFfd3JfcmVxICAgICAgPSBkbWlfcmVxX2RhdGExICAgICAgICAmIGRtaTJkbV93cl9pOworYXNzaWduIGRyZWdfd3JfcmVxICAgICAgID0gcGlwZTJkbV9kcmVnX3JlcV9pICAgJiBwaXBlMmRtX2RyZWdfd3JfaTsKK2Fzc2lnbiBjb21tYW5kX3dyX3JlcSAgICA9IGRtaV9yZXFfY29tbWFuZCAgICAgICYgZG1pMmRtX3dyX2k7Cithc3NpZ24gYXV0b2V4ZWNfd3JfcmVxICAgPSBkbWlfcmVxX2Fic3RyYWN0YXV0byAmIGRtaTJkbV93cl9pOworYXNzaWduIHByb2didWYwX3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmMCAgICAgJiBkbWkyZG1fd3JfaTsKK2Fzc2lnbiBwcm9nYnVmMV93cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjEgICAgICYgZG1pMmRtX3dyX2k7Cithc3NpZ24gcHJvZ2J1ZjJfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWYyICAgICAmIGRtaTJkbV93cl9pOworYXNzaWduIHByb2didWYzX3dyX3JlcSAgID0gZG1pX3JlcV9wcm9nYnVmMyAgICAgJiBkbWkyZG1fd3JfaTsKK2Fzc2lnbiBwcm9nYnVmNF93cl9yZXEgICA9IGRtaV9yZXFfcHJvZ2J1ZjQgICAgICYgZG1pMmRtX3dyX2k7Cithc3NpZ24gcHJvZ2J1ZjVfd3JfcmVxICAgPSBkbWlfcmVxX3Byb2didWY1ICAgICAmIGRtaTJkbV93cl9pOworYXNzaWduIGFic3RyYWN0Y3Nfd3JfcmVxID0gZG1pX3JlcV9hYnN0cmFjdGNzICAgJiBkbWkyZG1fd3JfaTsKKworLy8gSEFSVCBzdGF0ZSBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gaGFydF9zdGF0ZV9yZXNldCA9IChwaXBlMmRtX2hhcnRfc3RhdHVzX2kuZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUKTsKK2Fzc2lnbiBoYXJ0X3N0YXRlX3J1biAgID0gKHBpcGUyZG1faGFydF9zdGF0dXNfaS5kYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfUlVOKTsKK2Fzc2lnbiBoYXJ0X3N0YXRlX2RoYWx0ID0gKHBpcGUyZG1faGFydF9zdGF0dXNfaS5kYmdfc3RhdGUgPT0gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRCk7Cithc3NpZ24gaGFydF9zdGF0ZV9kcnVuICA9IChwaXBlMmRtX2hhcnRfc3RhdHVzX2kuZGJnX3N0YXRlID09IFNDUjFfSERVX0RCR1NUQVRFX0RSVU4pOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRE0gcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBSZWdpc3RlcnM6CisgLy8gLSBETSBjbG9jayBlbmFibGUgcmVnaXN0ZXIKKyAvLyAtIEF1eGlsYXJ5IFNraXAgUmVzZXQgT24gUG93ZXJ1cCByZWdpc3RlcgorIC8vIC0gRE1DT05UUk9MIHJlZ2lzdGVyCisgLy8gLSBETVNUQVRVUyByZWdpc3RlcgorCisvLyBETSBjbG9jayBlbmFibGUgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBjbGtfZW5fZG0gPSBkbWNvbnRyb2xfd3JfcmVxIHwgZG1jb250cm9sX2RtYWN0aXZlX2ZmIHwgY2xrX2VuX2RtX2ZmOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBjbGtfZW5fZG1fZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBpZiAoY2xrX2VuX2RtKSBiZWdpbgorICAgICAgICBjbGtfZW5fZG1fZmYgPD0gZG1jb250cm9sX2RtYWN0aXZlX2ZmOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBkbTJwaXBlX2FjdGl2ZV9vID0gY2xrX2VuX2RtX2ZmOworCisvLyBETUNPTlRST0wgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGRtY29udHJvbF9kbWFjdGl2ZV9mZiAgICAgPD0gMSdiMDsKKyAgICAgICAgZG1jb250cm9sX25kbXJlc2V0X2ZmICAgICA8PSAxJ2IwOworICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X2ZmIDw9IDEnYjA7CisgICAgICAgIGRtY29udHJvbF9oYWx0cmVxX2ZmICAgICAgPD0gMSdiMDsKKyAgICAgICAgZG1jb250cm9sX3Jlc3VtZXJlcV9mZiAgICA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCisgICAgICAgIGRtY29udHJvbF9kbWFjdGl2ZV9mZiAgICAgPD0gZG1jb250cm9sX2RtYWN0aXZlX25leHQ7CisgICAgICAgIGRtY29udHJvbF9uZG1yZXNldF9mZiAgICAgPD0gZG1jb250cm9sX25kbXJlc2V0X25leHQ7CisgICAgICAgIGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmYgPD0gZG1jb250cm9sX2Fja2hhdmVyZXNldF9uZXh0OworICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9mZiAgICAgIDw9IGRtY29udHJvbF9oYWx0cmVxX25leHQ7CisgICAgICAgIGRtY29udHJvbF9yZXN1bWVyZXFfZmYgICAgPD0gZG1jb250cm9sX3Jlc3VtZXJlcV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBkbWNvbnRyb2xfZG1hY3RpdmVfbmV4dCA9IGRtY29udHJvbF93cl9yZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRtaTJkbV93ZGF0YV9pW1NDUjFfREJHX0RNQ09OVFJPTF9ETUFDVElWRV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBkbWNvbnRyb2xfbmRtcmVzZXRfbmV4dCAgICAgPSBkbWNvbnRyb2xfbmRtcmVzZXRfZmY7CisgICAgZG1jb250cm9sX2Fja2hhdmVyZXNldF9uZXh0ID0gZG1jb250cm9sX2Fja2hhdmVyZXNldF9mZjsKKyAgICBkbWNvbnRyb2xfaGFsdHJlcV9uZXh0ICAgICAgPSBkbWNvbnRyb2xfaGFsdHJlcV9mZjsKKyAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX25leHQgICAgPSBkbWNvbnRyb2xfcmVzdW1lcmVxX2ZmOworICAgIGlmICh+ZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgorICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfbmV4dCAgICAgPSAxJ2IwOworICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X25leHQgPSAxJ2IwOworICAgICAgICBkbWNvbnRyb2xfaGFsdHJlcV9uZXh0ICAgICAgPSAxJ2IwOworICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX25leHQgICAgPSAxJ2IwOworICAgIGVuZCBlbHNlIGlmIChkbWNvbnRyb2xfd3JfcmVxKSBiZWdpbgorICAgICAgICBkbWNvbnRyb2xfbmRtcmVzZXRfbmV4dCAgICAgPSBkbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19ETUNPTlRST0xfTkRNUkVTRVRdOworICAgICAgICBkbWNvbnRyb2xfYWNraGF2ZXJlc2V0X25leHQgPSBkbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19ETUNPTlRST0xfQUNLSEFWRVJFU0VUXTsKKyAgICAgICAgZG1jb250cm9sX2hhbHRyZXFfbmV4dCAgICAgID0gZG1pMmRtX3dkYXRhX2lbU0NSMV9EQkdfRE1DT05UUk9MX0hBTFRSRVFdOworICAgICAgICBkbWNvbnRyb2xfcmVzdW1lcmVxX25leHQgICAgPSBkbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19ETUNPTlRST0xfUkVTVU1FUkVRXTsKKyAgICBlbmQKK2VuZAorCisvLyBSZXNldCBzaWduYWwgZm9yIHN5c3RlbSBjb250cm9sbGVkIGJ5IERlYnVnIE1vZHVsZQorYXNzaWduIGhhcnRfcnN0X25fbyA9IH5kbWNvbnRyb2xfbmRtcmVzZXRfZmY7Cithc3NpZ24gbmRtX3JzdF9uX28gID0gfmRtY29udHJvbF9uZG1yZXNldF9mZjsKKworLy8gU2tpcCByZXNldCBvbiBwb3dlcnVwIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBoYXZlcmVzZXRfc2tpcF9wd3J1cF9mZiA8PSAxJ2IxOworICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCisgICAgICAgIGhhdmVyZXNldF9za2lwX3B3cnVwX2ZmIDw9IGhhdmVyZXNldF9za2lwX3B3cnVwX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIGhhdmVyZXNldF9za2lwX3B3cnVwX25leHQgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmICA/IDEnYjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGF2ZXJlc2V0X3NraXBfcHdydXBfZmYgPyBoYXJ0X3N0YXRlX3Jlc2V0ICYgbmRtX3JzdF9uX28gJiBoYXJ0X3JzdF9uX28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXZlcmVzZXRfc2tpcF9wd3J1cF9mZjsKKworLy8gRE1TVEFUVVMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmYgPD0gMSdiMDsKKyAgICAgICAgZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZiA8PSAxJ2IwOworICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmICAgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KKyAgICAgICAgZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9mZiA8PSBkbXN0YXR1c19hbGxhbnlfaGF2ZXJlc2V0X25leHQ7CisgICAgICAgIGRtc3RhdHVzX2FsbGFueV9yZXN1bWVhY2tfZmYgPD0gZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19uZXh0OworICAgICAgICBkbXN0YXR1c19hbGxhbnlfaGFsdGVkX2ZmICAgIDw9IGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gZG1zdGF0dXNfYWxsYW55X2hhdmVyZXNldF9uZXh0ID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiAgICAgICAgICAgICAgICAgICAgICA/IDEnYjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+aGF2ZXJlc2V0X3NraXBfcHdydXBfZmYgJiBoYXJ0X3N0YXRlX3Jlc2V0ID8gMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtY29udHJvbF9hY2toYXZlcmVzZXRfZmYgICAgICAgICAgICAgICAgICAgPyAxJ2IwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtc3RhdHVzX2FsbGFueV9oYXZlcmVzZXRfZmY7Cithc3NpZ24gZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19uZXh0ID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiAgPyAxJ2IwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogfmRtY29udHJvbF9yZXN1bWVyZXFfZmYgPyAxJ2IwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGFydF9zdGF0ZV9ydW4gICAgICAgICAgPyAxJ2IxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkbXN0YXR1c19hbGxhbnlfcmVzdW1lYWNrX2ZmOworCithc3NpZ24gZG1zdGF0dXNfYWxsYW55X2hhbHRlZF9uZXh0ICAgID0gfmRtY29udHJvbF9kbWFjdGl2ZV9mZiA/IDEnYjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXJ0X3N0YXRlX2RoYWx0ICAgICAgID8gMSdiMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhhcnRfc3RhdGVfcnVuICAgICAgICAgPyAxJ2IwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRtc3RhdHVzX2FsbGFueV9oYWx0ZWRfZmY7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBDb21tYW5kIGNvbnRyb2wgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIEFic3RyYWN0IGNvbW1hbmQgZGVjb2RlcgorIC8vIC0gQWJzdHJhY3QgY29tbWFuZCBhY2Nlc3MgdmFsaWQgZmxhZ3MKKyAvLyAtIEFic3RyYWN0IGNvbW1hbmQgY29udHJvbCByZWdpc3RlcnMKKworYXNzaWduIGNsa19lbl9hYnMgPSBjbGtfZW5fZG0gJiBkbWNvbnRyb2xfZG1hY3RpdmVfZmY7CisKKy8vIEFic3RyYWN0IGNvbW1hbmQgZGVjb2RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGFic19jbWQgPSBkbWlfcmVxX2NvbW1hbmQgPyBkbWkyZG1fd2RhdGFfaSA6IGFic19jb21tYW5kX2ZmOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGFic19jbWRfcmVnbm8gICAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFR05PX0xPICs6IDEyXTsKKworICAgIGFic19jbWRfY3NyX3JvICAgICAgPSAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0NTUl9BRERSX01JU0EpCisgICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfY21kX3JlZ25vID09IFNDUjFfQ1NSX0FERFJfTVZFTkRPUklEKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0NTUl9BRERSX01BUkNISUQpCisgICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfY21kX3JlZ25vID09IFNDUjFfQ1NSX0FERFJfTUlNUElEKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWJzX2NtZF9yZWdubyA9PSBTQ1IxX0NTUl9BRERSX01IQVJUSUQpCisgICAgICAgICAgICAgICAgICAgICAgICB8IChhYnNfY21kX3JlZ25vID09IFNDUjFfSERVX0RCR0NTUl9BRERSX0RQQyk7CisKKyAgICBhYnNfY21kX3R5cGUgICAgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX1RZUEVfSEk6U0NSMV9EQkdfQ09NTUFORF9UWVBFX0xPXTsKKyAgICBhYnNfY21kX3JlZ2FjcyAgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19UUkFOU0ZFUl07CisgICAgYWJzX2NtZF9yZWd0eXBlICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fSEk6MTJdOworICAgIGFic19jbWRfcmVnZmlsZSAgICAgPSBhYnNfY21kWzExOjVdOworICAgIGFic19jbWRfcmVnc2l6ZSAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfSEk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9MT107CisgICAgYWJzX2NtZF9yZWd3ciAgICAgICA9IGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfV1JJVEVdOworICAgIGFic19jbWRfZXhlY3Byb2didWYgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1BPU1RFWEVDXTsKKworICAgIGFic19jbWRfcmVndmFsaWQgICAgPSB+KHx7YWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRVNFUlZFREJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRVNFUlZFREFdfSk7CisKKyAgICBhYnNfY21kX21lbXNpemUgICAgID0gYWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1TSVpFX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVNJWkVfTE9dOworICAgIGFic19jbWRfbWVtd3IgICAgICAgPSBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1dSSVRFXTsKKworICAgIGFic19jbWRfbWVtdmFsaWQgICAgPSB+KHx7YWJzX2NtZFtTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1WSVJUVUFMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNUE9TVElOQ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfY21kW1NDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURCX0hJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19jbWRbU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fUkVTRVJWRURBX0hJOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREFfSEldfSk7CitlbmQKKworYXNzaWduIGFic19yZWdfYWNjZXNzX2NzciAgPSAoYWJzX2NtZF9yZWd0eXBlID09IEFCU19DTURfSEFSVFJFR19DU1IpOworYXNzaWduIGFic19yZWdfYWNjZXNzX21wcmYgPSAoYWJzX2NtZF9yZWd0eXBlID09IEFCU19DTURfSEFSVFJFR19JTlRGUFUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChhYnNfY21kX3JlZ2ZpbGUgPT0gQUJTX0NNRF9IQVJUUkVHX0lOVCk7CisKKy8vIEFic3RyYWN0IGNvbW1hbmQgYWNjZXNzIHJlcXVlc3QgYW5kIHZhbGlkIGZsYWdzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gYWJzX2NtZF9yZWdzaXplX3ZkICAgICAgID0gKGFic19jbWRfcmVnc2l6ZSA9PSAzJ2gyKTsKK2Fzc2lnbiBhYnNfY21kX21lbXNpemVfdmQgICAgICAgPSAoYWJzX2NtZF9tZW1zaXplIDwgMydoMyk7CisKK2Fzc2lnbiBhYnNfY21kX2hhcnRyZWdfdmQgICAgICAgPSAoYWJzX2NtZF90eXBlID09IEFCU19DTURfSEFSVFJFRykgJiBhYnNfY21kX3JlZ3ZhbGlkOworYXNzaWduIGFic19jbWRfaGFydG1lbV92ZCAgICAgICA9IChhYnNfY21kX3R5cGUgPT0gQUJTX0NNRF9IQVJUTUVNKSAmIGFic19jbWRfbWVtdmFsaWQ7CisKKy8vIEFic3RyYWN0IGNvbW1hbmQgcmVxdWVzdHMKK2Fzc2lnbiBhYnNfY21kX3JlZ19hY2Nlc3NfcmVxICAgPSBhYnNfY21kX2hhcnRyZWdfdmQgICAgICYgYWJzX2NtZF9yZWdhY3M7Cithc3NpZ24gYWJzX2NtZF9jc3JfYWNjZXNzX3JlcSAgID0gYWJzX2NtZF9yZWdfYWNjZXNzX3JlcSAmIGFic19yZWdfYWNjZXNzX2NzcjsKK2Fzc2lnbiBhYnNfY21kX21wcmZfYWNjZXNzX3JlcSAgPSBhYnNfY21kX3JlZ19hY2Nlc3NfcmVxICYgYWJzX3JlZ19hY2Nlc3NfbXByZjsKK2Fzc2lnbiBhYnNfY21kX2V4ZWNwcm9nYnVmX3JlcSAgPSBhYnNfY21kX2hhcnRyZWdfdmQgICAgICYgYWJzX2NtZF9leGVjcHJvZ2J1ZjsKKworLy8gQWJzdHJhY3QgY29tbWFuZCBhY2Nlc3MgdmFsaWQgZmxhZ3MKK2Fzc2lnbiBhYnNfY21kX2Nzcl9yb19hY2Nlc3NfdmQgPSBhYnNfY21kX2Nzcl9hY2Nlc3NfcmVxICAmIGFic19jbWRfcmVnc2l6ZV92ZCAmIH5hYnNfY21kX3JlZ3dyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfmFic19jbWRfZXhlY3Byb2didWYgICAgJiBhYnNfY21kX2Nzcl9ybyAgICAgJiBoYXJ0X3N0YXRlX3J1bjsKK2Fzc2lnbiBhYnNfY21kX2Nzcl9yd19hY2Nlc3NfdmQgPSBhYnNfY21kX2Nzcl9hY2Nlc3NfcmVxICAmIGFic19jbWRfcmVnc2l6ZV92ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChhYnNfY21kX3JlZ3dyIHwgfmFic19jbWRfY3NyX3JvX2FjY2Vzc192ZCk7Cithc3NpZ24gYWJzX2NtZF9tcHJmX2FjY2Vzc192ZCAgID0gYWJzX2NtZF9tcHJmX2FjY2Vzc19yZXEgJiBhYnNfY21kX3JlZ3NpemVfdmQ7Cithc3NpZ24gYWJzX2NtZF9tZW1fYWNjZXNzX3ZkICAgID0gYWJzX2NtZF9oYXJ0bWVtX3ZkICYgYWJzX2NtZF9tZW1zaXplX3ZkOworCisvLyBBYnN0cmFjdCBjb21tYW5kIGNvbnRyb2wgcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoY2xrX2VuX2FicyAmIGFic19mc21faWRsZSkgYmVnaW4KKyAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19mZiA8PSBhYnNfY21kX3Bvc3RleGVjX25leHQ7CisgICAgICAgIGFic19jbWRfd3JfZmYgICAgICAgPD0gYWJzX2NtZF93cl9uZXh0OworICAgICAgICBhYnNfY21kX3JlZ25vX2ZmICAgIDw9IGFic19jbWRfcmVnbm87CisgICAgICAgIGFic19jbWRfc2l6ZV9mZiAgICAgPD0gYWJzX2NtZF9zaXplX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBhYnNfY21kX3dyX25leHQgICAgICAgPSAxJ2IwOworICAgIGFic19jbWRfcG9zdGV4ZWNfbmV4dCA9IDEnYjA7CisgICAgYWJzX2NtZF9zaXplX25leHQgICAgID0gYWJzX2NtZF9zaXplX2ZmOworICAgIGlmICgoY29tbWFuZF93cl9yZXEgfCBkbWlfcnB0X2NvbW1hbmQpICYgaGFydF9zdGF0ZV9kaGFsdCAmIGFic19mc21faWRsZSkgYmVnaW4KKyAgICAgICAgaWYgKGFic19jbWRfY3NyX3J3X2FjY2Vzc192ZCkgYmVnaW4KKyAgICAgICAgICAgIGFic19jbWRfd3JfbmV4dCAgICAgICA9IGFic19jbWRfcmVnd3I7CisgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX25leHQgPSBhYnNfY21kX2V4ZWNwcm9nYnVmOworICAgICAgICBlbmQgZWxzZSBpZiAoYWJzX2NtZF9tcHJmX2FjY2Vzc192ZCkgYmVnaW4KKyAgICAgICAgICAgIGFic19jbWRfd3JfbmV4dCAgICAgICA9IGFic19jbWRfcmVnd3I7CisgICAgICAgICAgICBhYnNfY21kX3NpemVfbmV4dCAgICAgPSBhYnNfY21kX3JlZ3NpemVbMTowXTsKKyAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfbmV4dCA9IGFic19jbWRfZXhlY3Byb2didWY7CisgICAgICAgIGVuZCBlbHNlIGlmIChhYnNfY21kX21lbV9hY2Nlc3NfdmQpIGJlZ2luCisgICAgICAgICAgICBhYnNfY21kX3dyX25leHQgICAgICAgPSBhYnNfY21kX21lbXdyOworICAgICAgICAgICAgYWJzX2NtZF9zaXplX25leHQgICAgID0gYWJzX2NtZF9tZW1zaXplWzE6MF07CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBjb21tYW5kIEZTTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGNsa19lbl9kbSkgYmVnaW4KKyAgICAgICAgaWYgKH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYpIGJlZ2luCisgICAgICAgICAgICBhYnNfZnNtX2ZmIDw9IEFCU19TVEFURV9JRExFOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgYWJzX2ZzbV9mZiA8PSBhYnNfZnNtX25leHQ7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgYWJzX2ZzbV9uZXh0ID0gYWJzX2ZzbV9mZjsKKworICAgIGNhc2UgKGFic19mc21fZmYpCisgICAgICAgIEFCU19TVEFURV9JRExFOiBiZWdpbgorICAgICAgICAgICAgaWYgKGNvbW1hbmRfd3JfcmVxIHwgZG1pX3JwdF9jb21tYW5kKSBiZWdpbgorICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCisgICAgICAgICAgICAgICAgICAgIGFic19jbWRfY3NyX3JvX2FjY2Vzc192ZDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0NTUl9STzsKKyAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3JfcndfYWNjZXNzX3ZkOiBhYnNfZnNtX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0ID8gQUJTX1NUQVRFX0NTUl9TQVZFX1hSRUcgOiBBQlNfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICBhYnNfY21kX21wcmZfYWNjZXNzX3ZkICA6IGFic19mc21fbmV4dCA9IGhhcnRfc3RhdGVfZGhhbHQgPyBBQlNfU1RBVEVfWFJFR19SVyAgICAgICA6IEFCU19TVEFURV9FUlI7CisgICAgICAgICAgICAgICAgICAgIGFic19jbWRfZXhlY3Byb2didWZfcmVxIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VYRUM7CisgICAgICAgICAgICAgICAgICAgIGFic19jbWRfbWVtX2FjY2Vzc192ZCAgIDogYWJzX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdCA/IEFCU19TVEFURV9NRU1fU0FWRV9YUkVHIDogQUJTX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBBQlNfU1RBVEVfRVhFQzogYmVnaW4KKyAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoZGhpX3Jlc3BfZXhjIHwgYWJzX2Vycl9hY2NfYnVzeV9mZikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfSURMRTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBBQlNfU1RBVEVfWFJFR19SVzogYmVnaW4KKyAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQorICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X2ZmOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICBhYnNfY21kX3Bvc3RleGVjX2ZmOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVhFQzsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0lETEU7CisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgICAgIEFCU19TVEFURV9DU1JfUk8gICAgICAgOiBhYnNfZnNtX25leHQgPSBhYnNfZXJyX2FjY19idXN5X2ZmID8gQUJTX1NUQVRFX0VSUiAgICAgICAgICAgICA6IEFCU19TVEFURV9JRExFOworICAgICAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRzogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgICAgICAgICAgICA/IEFCU19TVEFURV9DU1JfUlcgICAgICAgICAgOiBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRzsKKyAgICAgICAgQUJTX1NUQVRFX0NTUl9SVyAgICAgICA6IGFic19mc21fbmV4dCA9IGRoaV9yZXNwICAgICAgICAgICAgPyBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHIDogQUJTX1NUQVRFX0NTUl9SVzsKKworICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHOiBiZWdpbgorICAgICAgICAgICAgaWYgKGRoaV9yZXNwKSBiZWdpbgorICAgICAgICAgICAgICAgIGNhc2UgKDEnYjEpCisgICAgICAgICAgICAgICAgICAgIGFic19lcnJfZXhjX2ZmICAgICAgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X2ZmIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9wb3N0ZXhlY19mZiA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FWEVDOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0lETEU7CisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHICAgICAgICAgOiBhYnNfZnNtX25leHQgPSBkaGlfcmVzcCA/IEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIgICA6IEFCU19TVEFURV9NRU1fU0FWRV9YUkVHOworICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSIDogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgPyBBQlNfU1RBVEVfTUVNX1JXICAgICAgICAgICAgICAgICAgOiBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSOworICAgICAgICBBQlNfU1RBVEVfTUVNX1JXICAgICAgICAgICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgPyBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHICAgICAgICAgOiBBQlNfU1RBVEVfTUVNX1JXOworICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHICAgICAgIDogYWJzX2ZzbV9uZXh0ID0gZGhpX3Jlc3AgPyBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFIgOiBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHOworCisgICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYmVnaW4KKyAgICAgICAgICAgIGlmIChkaGlfcmVzcCkgYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQorICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2V4Y19mZjogYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9hY2NfYnVzeV9mZiA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9FUlI7CisgICAgICAgICAgICAgICAgICAgIGFic19jbWRfcG9zdGV4ZWNfZmYgOiBhYnNfZnNtX25leHQgPSBBQlNfU1RBVEVfRVhFQzsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGFic19mc21fbmV4dCA9IEFCU19TVEFURV9JRExFOworICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBBQlNfU1RBVEVfRVJSOiBiZWdpbgorICAgICAgICAgICAgaWYgKGFic3RyYWN0Y3Nfd3JfcmVxICYgKGFic3RyYWN0Y3NfY21kZXJyX25leHQgPT0gMydiMCkpIGJlZ2luCisgICAgICAgICAgICAgICAgYWJzX2ZzbV9uZXh0ID0gQUJTX1NUQVRFX0lETEU7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorCisgICAgaWYgKH5hYnNfZnNtX2lkbGUgJiBoYXJ0X3N0YXRlX3Jlc2V0KSBiZWdpbgorICAgICAgICBhYnNfZnNtX25leHQgICAgPSBBQlNfU1RBVEVfRVJSOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBhYnNfZnNtX2lkbGUgICAgID0gKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX0lETEUpOworYXNzaWduIGFic19mc21fZXhlYyAgICAgPSAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfRVhFQyk7Cithc3NpZ24gYWJzX2ZzbV9jc3Jfcm8gICA9IChhYnNfZnNtX2ZmID09IEFCU19TVEFURV9DU1JfUk8pOworYXNzaWduIGFic19mc21fZXJyICAgICAgPSAoYWJzX2ZzbV9mZiA9PSBBQlNfU1RBVEVfRVJSKTsKK2Fzc2lnbiBhYnNfZnNtX3VzZV9hZGRyID0gKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUikKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFic19mc21fZmYgPT0gQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFic3RyYWN0IGNvbW1hbmQgc3RhdHVzIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBYnN0cmFjdCBjb21tYW5kIGFjY2VzcyBidXN5IGVycm9yIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gYWJzX2Vycl9hY2NfYnVzeV91cGQgPSBjbGtfZW5fYWJzICYgKGFic19mc21faWRsZSB8IGRtaV9yZXFfYW55KTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGFic19lcnJfYWNjX2J1c3lfdXBkKSBhYnNfZXJyX2FjY19idXN5X2ZmIDw9IGFic19lcnJfYWNjX2J1c3lfbmV4dDsKK2VuZAorCithc3NpZ24gYWJzX2Vycl9hY2NfYnVzeV9uZXh0ID0gfmFic19mc21faWRsZSAmIGRtaV9yZXFfYW55OworCisvLyBBYnN0cmFjdCBjb21tYW5kIGFjY2VzcyBleGNlcHRpb24gZXJyb3IgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBhYnNfZXJyX2V4Y191cGQgPSBjbGtfZW5fYWJzICYgKGFic19mc21faWRsZSB8IChkaGlfcmVzcCAmIGRoaV9yZXNwX2V4YykpOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoYWJzX2Vycl9leGNfdXBkKSBhYnNfZXJyX2V4Y19mZiA8PSBhYnNfZXJyX2V4Y19uZXh0OworZW5kCisKK2Fzc2lnbiBhYnNfZXJyX2V4Y19uZXh0ID0gfmFic19mc21faWRsZSAmIGRoaV9yZXNwICYgZGhpX3Jlc3BfZXhjOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWJzdHJhY3QgSW5zdHJ1Y3Rpb24gbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIENvc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgorIC8vIC0gSW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIHJlcXVlc3QgcmVnaXN0ZXIKKyAvLyAtIEluc3RydWN0aW9uIG1lbW9yeSBGVU5DVDMgZmllbGQgbXVsdGlwbGV4ZXIKKyAvLyAtIEluc3RydWN0aW9uIFJTMSBtdWx0aXBsZXhlcgorIC8vIC0gSW5zdHJ1Y3Rpb24gUkQgbXVsdGlwbGV4ZXIKKyAvLyAtIEFic3RyYWN0IEluc3RydWN0aW9uIHJlZ2lzdGVyCisKKy8vIEFic3RyYWN0IGluc3RydWN0aW9uIGV4ZWN1dGlvbiByZXF1ZXN0IHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gYWJzX2V4ZWNfcmVxX25leHQgPSB+KGFic19mc21faWRsZSB8IGFic19mc21fY3NyX3JvIHwgYWJzX2ZzbV9lcnIpICYgfmRoaV9yZXNwOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoY2xrX2VuX2RtKSBiZWdpbgorICAgICAgICBpZiAofmRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KKyAgICAgICAgICAgIGFic19leGVjX3JlcV9mZiA8PSAxJ2IwOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgYWJzX2V4ZWNfcmVxX2ZmIDw9IGFic19leGVjX3JlcV9uZXh0OworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBtZW1vcnkgRlVOQ1QzIGZpZWxkIG11bHRpcGxleGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNhc2UgKGFic19jbWRfc2l6ZV9mZikKKyAgICAgICAgMidiMDAgIDogYWJzX2luc3RyX21lbV9mdW5jdDMgPSBhYnNfY21kX3dyX2ZmID8gU0NSMV9GVU5DVDNfU0IgOiBTQ1IxX0ZVTkNUM19MQlU7CisgICAgICAgIDInYjAxICA6IGFic19pbnN0cl9tZW1fZnVuY3QzID0gYWJzX2NtZF93cl9mZiA/IFNDUjFfRlVOQ1QzX1NIIDogU0NSMV9GVU5DVDNfTEhVOworICAgICAgICAyJ2IxMCAgOiBhYnNfaW5zdHJfbWVtX2Z1bmN0MyA9IGFic19jbWRfd3JfZmYgPyBTQ1IxX0ZVTkNUM19TVyA6IFNDUjFfRlVOQ1QzX0xXOworICAgICAgICBkZWZhdWx0OiBhYnNfaW5zdHJfbWVtX2Z1bmN0MyA9IFNDUjFfRlVOQ1QzX1NCOworICAgIGVuZGNhc2UKK2VuZAorCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBSUzEgbXVsdGlwbGV4ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgYWJzX2luc3RyX3JzMSA9IDUnaDA7CisgICAgY2FzZSAoYWJzX2ZzbV9mZikKKyAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlcgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gYWJzX2NtZF93cl9mZiA/IDUnaDAgOiBhYnNfY21kX3JlZ25vX2ZmWzQ6MF07CisgICAgICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHICAgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IDUnaDU7CisgICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHICAgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IDUnaDU7CisgICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUcgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IDUnaDU7CisgICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUcgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IDUnaDU7CisgICAgICAgIEFCU19TVEFURV9DU1JfUlcgICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JzMSA9IGFic19jbWRfd3JfZmYgPyA1J2g1IDogNSdoMDsKKyAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNjsKKyAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBhYnNfaW5zdHJfcnMxID0gNSdoNjsKKyAgICAgICAgQUJTX1NUQVRFX01FTV9SVyAgICAgICAgICAgICAgICAgOiBhYnNfaW5zdHJfcnMxID0gNSdoNjsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIGFic19pbnN0cl9yczIgPSA1J2g1OworCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiBSRCBtdWx0aXBsZXhlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBhYnNfaW5zdHJfcmQgID0gNSdoMDsKKyAgICBjYXNlIChhYnNfZnNtX2ZmKQorICAgICAgICBBQlNfU1RBVEVfWFJFR19SVyAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yZCA9IGFic19jbWRfd3JfZmYgPyBhYnNfY21kX3JlZ25vX2ZmWzQ6MF0gOiA1J2gwOworICAgICAgICBBQlNfU1RBVEVfQ1NSX1NBVkVfWFJFRyAgICAgICAgICA6IGFic19pbnN0cl9yZCA9IGFic19jbWRfd3JfZmYgPyA1J2g1IDogNSdoMDsKKyAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUcgICAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSBhYnNfY21kX3dyX2ZmID8gNSdoNSA6IDUnaDA7CisgICAgICAgIEFCU19TVEFURV9DU1JfUlcgICAgICAgICAgICAgICAgIDogYWJzX2luc3RyX3JkID0gYWJzX2NtZF93cl9mZiA/IDUnaDAgOiA1J2g1OworICAgICAgICBBQlNfU1RBVEVfTUVNX1JXICAgICAgICAgICAgICAgICA6IGFic19pbnN0cl9yZCA9IGFic19jbWRfd3JfZmYgPyA1J2gwIDogNSdoNTsKKyAgICAgICAgQUJTX1NUQVRFX0NTUl9SRVRVUk5fWFJFRyAgICAgICAgOiBhYnNfaW5zdHJfcmQgPSA1J2g1OworICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHICAgICAgICA6IGFic19pbnN0cl9yZCA9IDUnaDU7CisgICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHX0ZPUkFERFIgIDogYWJzX2luc3RyX3JkID0gNSdoNjsKKyAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBhYnNfaW5zdHJfcmQgPSA1J2g2OworICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGJlZ2luIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCisvLyBBYnN0cmFjdCBpbnN0cnVjdGlvbiByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGNsa19lbl9hYnMpIGJlZ2luCisgICAgICAgIGFic19leGVjX2luc3RyX2ZmIDw9IGFic19leGVjX2luc3RyX25leHQ7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBhYnNfZXhlY19pbnN0cl9uZXh0ID0gYWJzX2V4ZWNfaW5zdHJfZmY7CisgICAgY2FzZSAoYWJzX2ZzbV9mZikKKyAgICAgICAgQUJTX1NUQVRFX1hSRUdfUlcsCisgICAgICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHLAorICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHLAorICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFRywKKyAgICAgICAgQUJTX1NUQVRFX01FTV9TQVZFX1hSRUdfRk9SQUREUiwKKyAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFRywKKyAgICAgICAgQUJTX1NUQVRFX01FTV9SRVRVUk5fWFJFR19GT1JBRERSOiBiZWdpbgorICAgICAgICAgICAgYWJzX2V4ZWNfaW5zdHJfbmV4dCA9IHtTQ1IxX0hEVV9EQkdDU1JfQUREUl9EU0NSQVRDSDAsIGFic19pbnN0cl9yczEsIFNDUjFfRlVOQ1QzX0NTUlJXLCBhYnNfaW5zdHJfcmQsIFNDUjFfT1BfU1lTVEVNfTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgQUJTX1NUQVRFX0NTUl9SVzogYmVnaW4KKyAgICAgICAgICAgIGFic19leGVjX2luc3RyX25leHQgPSBhYnNfY21kX3dyX2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge2Fic19jbWRfcmVnbm9fZmZbMTE6MF0sIGFic19pbnN0cl9yczEsIFNDUjFfRlVOQ1QzX0NTUlJXLCBhYnNfaW5zdHJfcmQsIFNDUjFfT1BfU1lTVEVNfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHthYnNfY21kX3JlZ25vX2ZmWzExOjBdLCBhYnNfaW5zdHJfcnMxLCBTQ1IxX0ZVTkNUM19DU1JSUywgYWJzX2luc3RyX3JkLCBTQ1IxX09QX1NZU1RFTX07CisgICAgICAgIGVuZAorCisgICAgICAgIEFCU19TVEFURV9NRU1fUlc6IGJlZ2luCisgICAgICAgICAgICBhYnNfZXhlY19pbnN0cl9uZXh0ID0gYWJzX2NtZF93cl9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHs3J2gwLCAgYWJzX2luc3RyX3JzMiwgYWJzX2luc3RyX3JzMSwgYWJzX2luc3RyX21lbV9mdW5jdDMsIDUnaDAsICAgICAgICAgU0NSMV9PUF9TVE9SRX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7MTInaDAsICAgICAgICAgICAgICAgIGFic19pbnN0cl9yczEsIGFic19pbnN0cl9tZW1fZnVuY3QzLCBhYnNfaW5zdHJfcmQsIFNDUjFfT1BfTE9BRH07CisgICAgICAgIGVuZAorCisgICAgICAgIGRlZmF1bHQ6IGJlZ2luIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWJzdHJhY3QgcmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBSZWdpc3RlcnM6CisgLy8gLSBBQlNUUkFDVENTIHJlZ2lzdGVyCisgLy8gLSBDT01NQU5EIHJlZ2lzdGVyCisgLy8gLSBBQlNUUkFDVEFVVE8gcmVnaXN0ZXIKKyAvLyAtIFBST0dCVUYwLi41IHJlZ2lzdGVycworIC8vIC0gREFUQTAuLjEgcmVnaXN0ZXJzCisKKy8vIEFCU1RSQUNUQ1MgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChjbGtfZW5fZG0pIGJlZ2luCisgICAgICAgIGlmICh+ZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgorICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfZmYgPD0gQUJTX0VSUl9OT05FOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfZmYgPD0gYWJzdHJhY3Rjc19jbWRlcnJfbmV4dDsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gYWJzdHJhY3Rjc19jbWRlcnJfZmY7CisKKyAgICBjYXNlIChhYnNfZnNtX2ZmKQorICAgICAgICBBQlNfU1RBVEVfSURMRTogYmVnaW4KKyAgICAgICAgICAgIGlmIChjb21tYW5kX3dyX3JlcSB8IGRtaV9ycHRfY29tbWFuZCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoYWJzX2NtZF9oYXJ0cmVnX3ZkKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlICgxJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9yZWdfYWNjZXNzX3JlcSA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3JfcndfYWNjZXNzX3ZkOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhYnN0cmFjdGNzX2NtZGVycl9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBQlNfRVJSX05PSEFMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9tcHJmX2FjY2Vzc192ZCAgOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gaGFydF9zdGF0ZV9kaGFsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhYnN0cmFjdGNzX2NtZGVycl9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBQlNfRVJSX05PSEFMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9jc3Jfcm9fYWNjZXNzX3ZkOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gYWJzdHJhY3Rjc19jbWRlcnJfZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgIDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQ01EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2NtZF9leGVjcHJvZ2J1Zl9yZXEgICAgICAgICA6IGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBhYnN0cmFjdGNzX2NtZGVycl9mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9DTUQ7CisgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoYWJzX2NtZF9oYXJ0bWVtX3ZkKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gfmFic19jbWRfbWVtc2l6ZV92ZCA/IEFCU19FUlJfQ01ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB+aGFydF9zdGF0ZV9kaGFsdCAgID8gQUJTX0VSUl9OT0hBTFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhYnN0cmFjdGNzX2NtZGVycl9mZjsKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9DTUQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisKKyAgICAgICAgQUJTX1NUQVRFX0VYRUM6IGJlZ2luCisgICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKGRoaV9yZXNwX2V4YykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChhYnNfZXJyX2FjY19idXN5X2ZmKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9CVVNZOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgICAgIEFCU19TVEFURV9YUkVHX1JXLAorICAgICAgICBBQlNfU1RBVEVfQ1NSX1JPOiBiZWdpbgorICAgICAgICAgICAgaWYgKGFic19lcnJfYWNjX2J1c3lfZmYpIGJlZ2luCisgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfQlVTWTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBBQlNfU1RBVEVfQ1NSX1JFVFVSTl9YUkVHLAorICAgICAgICBBQlNfU1RBVEVfTUVNX1JFVFVSTl9YUkVHX0ZPUkFERFI6IGJlZ2luCisgICAgICAgICAgICBpZiAoZGhpX3Jlc3ApIGJlZ2luCisgICAgICAgICAgICAgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYWJzX2Vycl9leGNfZmYgICAgIDogYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IEFCU19FUlJfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBhYnNfZXJyX2FjY19idXN5X2ZmOiBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gQUJTX0VSUl9CVVNZOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICBhYnN0cmFjdGNzX2NtZGVycl9uZXh0ID0gYWJzdHJhY3Rjc19jbWRlcnJfZmY7CisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgICAgIEFCU19TVEFURV9FUlI6IGJlZ2luCisgICAgICAgICAgICBpZiAoZG1pX3JlcV9hYnN0cmFjdGNzICYgZG1pMmRtX3dyX2kpIGJlZ2luCisgICAgICAgICAgICAgICAgYWJzdHJhY3Rjc19jbWRlcnJfbmV4dCA9IHR5cGVfc2NyMV9hYnNfZXJyX2UnKGxvZ2ljJyhhYnN0cmFjdGNzX2NtZGVycl9mZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKH5kbWkyZG1fd2RhdGFfaVtTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9MT10pKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBkZWZhdWx0OiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCisKKyAgICBpZiAofmFic19mc21faWRsZSAmIGhhcnRfc3RhdGVfcmVzZXQpIGJlZ2luCisgICAgICAgIGFic3RyYWN0Y3NfY21kZXJyX25leHQgPSBBQlNfRVJSX0VYQ0VQVElPTjsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gYWJzdHJhY3Rjc19idXN5ID0gfmFic19mc21faWRsZSAmIH5hYnNfZnNtX2VycjsKKworLy8gQWJzdHJhY3QgQ09NTUFORCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGNsa19lbl9kbSkgYWJzX2NvbW1hbmRfZmYgPD0gYWJzX2NvbW1hbmRfbmV4dDsKK2VuZAorCithc3NpZ24gYWJzX2NvbW1hbmRfbmV4dCA9IH5kbWNvbnRyb2xfZG1hY3RpdmVfZmYgICAgICAgICAgPyAnMAorICAgICAgICAgICAgICAgICAgICAgICAgOiAoY29tbWFuZF93cl9yZXEgJiBhYnNfZnNtX2lkbGUpID8gZG1pMmRtX3dkYXRhX2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFic19jb21tYW5kX2ZmOworCisvLyBBYnN0cmFjdCBBQlNUUkFDVEFVVE8gcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChjbGtfZW5fZG0pIGFic19hdXRvZXhlY19mZiA8PSBhYnNfYXV0b2V4ZWNfbmV4dDsKK2VuZAorCithc3NpZ24gYWJzX2F1dG9leGVjX25leHQgPSB+ZG1jb250cm9sX2RtYWN0aXZlX2ZmICAgICAgICAgICA/IDEnYjAKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IChhdXRvZXhlY193cl9yZXEgJiBhYnNfZnNtX2lkbGUpID8gZG1pMmRtX3dkYXRhX2lbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWJzX2F1dG9leGVjX2ZmOworCisvLyBQcm9ncmFtIEJ1ZmZlciByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChjbGtfZW5fYWJzICYgYWJzX2ZzbV9pZGxlKSBiZWdpbgorICAgICAgICBpZiAocHJvZ2J1ZjBfd3JfcmVxKSBhYnNfcHJvZ2J1ZjBfZmYgPD0gZG1pMmRtX3dkYXRhX2k7CisgICAgICAgIGlmIChwcm9nYnVmMV93cl9yZXEpIGFic19wcm9nYnVmMV9mZiA8PSBkbWkyZG1fd2RhdGFfaTsKKyAgICAgICAgaWYgKHByb2didWYyX3dyX3JlcSkgYWJzX3Byb2didWYyX2ZmIDw9IGRtaTJkbV93ZGF0YV9pOworICAgICAgICBpZiAocHJvZ2J1ZjNfd3JfcmVxKSBhYnNfcHJvZ2J1ZjNfZmYgPD0gZG1pMmRtX3dkYXRhX2k7CisgICAgICAgIGlmIChwcm9nYnVmNF93cl9yZXEpIGFic19wcm9nYnVmNF9mZiA8PSBkbWkyZG1fd2RhdGFfaTsKKyAgICAgICAgaWYgKHByb2didWY1X3dyX3JlcSkgYWJzX3Byb2didWY1X2ZmIDw9IGRtaTJkbV93ZGF0YV9pOworICAgIGVuZAorZW5kCisKKy8vIERhdGEgMCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGNsa19lbl9hYnMpIGJlZ2luCisgICAgICAgIGFic19kYXRhMF9mZiA8PSBhYnNfZGF0YTBfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gZGF0YTBfeHJlZ19zYXZlID0gZHJlZ193cl9yZXEgJiB+YWJzX2NtZF93cl9mZjsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBhYnNfZGF0YTBfbmV4dCA9IGFic19kYXRhMF9mZjsKKworICAgIGNhc2UgKGFic19mc21fZmYpCisgICAgICAgIEFCU19TVEFURV9JRExFICAgICAgICAgICA6IGFic19kYXRhMF9uZXh0ID0gZGF0YTBfd3JfcmVxICAgID8gZG1pMmRtX3dkYXRhX2kgICAgICAgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9FWEVDICAgICAgICAgICA6IGFic19kYXRhMF9uZXh0ID0gZHJlZ193cl9yZXEgICAgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9DU1JfU0FWRV9YUkVHICA6IGFic19kYXRhMF9uZXh0ID0gZHJlZ193cl9yZXEgICAgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9DU1JfUkVUVVJOX1hSRUc6IGFic19kYXRhMF9uZXh0ID0gZHJlZ193cl9yZXEgICAgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9NRU1fU0FWRV9YUkVHICA6IGFic19kYXRhMF9uZXh0ID0gZHJlZ193cl9yZXEgICAgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUc6IGFic19kYXRhMF9uZXh0ID0gZHJlZ193cl9yZXEgICAgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisgICAgICAgIEFCU19TVEFURV9YUkVHX1JXICAgICAgICA6IGFic19kYXRhMF9uZXh0ID0gZGF0YTBfeHJlZ19zYXZlID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTBfZmY7CisKKyAgICAgICAgQUJTX1NUQVRFX0NTUl9STzogYmVnaW4KKyAgICAgICAgICAgIGNhc2UgKGFic19jbWRfcmVnbm9fZmZbMTE6MF0pCisgICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSVNBICAgICA6IGFic19kYXRhMF9uZXh0ID0gU0NSMV9DU1JfTUlTQTsKKyAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRDogYWJzX2RhdGEwX25leHQgPSBTQ1IxX0NTUl9NVkVORE9SSUQ7CisgICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NQVJDSElEICA6IGFic19kYXRhMF9uZXh0ID0gU0NSMV9DU1JfTUFSQ0hJRDsKKyAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX01JTVBJRCAgIDogYWJzX2RhdGEwX25leHQgPSBTQ1IxX0NTUl9NSU1QSUQ7CisgICAgICAgICAgICAgICAgU0NSMV9DU1JfQUREUl9NSEFSVElEICA6IGFic19kYXRhMF9uZXh0ID0gc29jMmRtX2Z1c2VfbWhhcnRpZF9pOworICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgOiBhYnNfZGF0YTBfbmV4dCA9IHBpcGUyZG1fcGNfc2FtcGxlX2k7CisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbiBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8gRGF0YSAxIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoY2xrX2VuX2FicykgYmVnaW4KKyAgICAgICAgYWJzX2RhdGExX2ZmIDw9IGFic19kYXRhMV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgYWJzX2RhdGExX25leHQgPSBhYnNfZGF0YTFfZmY7CisgICAgY2FzZSAoYWJzX2ZzbV9mZikKKyAgICAgICAgQUJTX1NUQVRFX0lETEUgICAgICAgICAgICAgICAgICAgOiBhYnNfZGF0YTFfbmV4dCA9IGRhdGExX3dyX3JlcSA/IGRtaTJkbV93ZGF0YV9pICAgICAgIDogYWJzX2RhdGExX2ZmOworICAgICAgICBBQlNfU1RBVEVfTUVNX1NBVkVfWFJFR19GT1JBRERSICA6IGFic19kYXRhMV9uZXh0ID0gZHJlZ193cl9yZXEgID8gcGlwZTJkbV9kcmVnX3dkYXRhX2kgOiBhYnNfZGF0YTFfZmY7CisgICAgICAgIEFCU19TVEFURV9NRU1fUkVUVVJOX1hSRUdfRk9SQUREUjogYWJzX2RhdGExX25leHQgPSBkcmVnX3dyX3JlcSAgPyBwaXBlMmRtX2RyZWdfd2RhdGFfaSA6IGFic19kYXRhMV9mZjsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlYnVnIEhhcnQgSW50ZXJmYWNlIDogY29udHJvbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGNtZF9yZXNwX29rICAgID0gcGlwZTJkbV9jbWRfcmVzcF9pICYgfnBpcGUyZG1fY21kX3Jjb2RlX2k7Cithc3NpZ24gaGFydF9yc3RfdW5leHAgPSB+ZGhpX2ZzbV9pZGxlICAgICAgJiB+ZGhpX2ZzbV9oYWx0X3JlcSAmIGhhcnRfc3RhdGVfcmVzZXQ7CisKK2Fzc2lnbiBoYWx0X3JlcV92ZCAgICA9IGRtY29udHJvbF9oYWx0cmVxX2ZmICAgJiB+aGFydF9zdGF0ZV9kaGFsdDsKK2Fzc2lnbiByZXN1bWVfcmVxX3ZkICA9IGRtY29udHJvbF9yZXN1bWVyZXFfZmYgJiB+ZG1zdGF0dXNfYWxsYW55X3Jlc3VtZWFja19mZgorICAgICAgICAgICAgICAgICAgICAgICYgaGFydF9zdGF0ZV9kaGFsdDsKKworLy8gREhJIGZzbQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgZGhpX2ZzbV9mZiAgIDw9IERISV9TVEFURV9JRExFOworICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCisgICAgICAgIGRoaV9mc21fZmYgPD0gZGhpX2ZzbV9uZXh0OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZGhpX2ZzbV9uZXh0ID0gZGhpX2ZzbV9mZjsKKyAgICBpZiAofmhhcnRfcnN0X3VuZXhwICYgZG1jb250cm9sX2RtYWN0aXZlX2ZmKSBiZWdpbgorICAgICAgICAvLyBOb3JtYWwgd29yaworICAgICAgICBjYXNlIChkaGlfZnNtX2ZmKQorICAgICAgICAgICAgREhJX1NUQVRFX0lETEUgICAgICA6IGRoaV9mc21fbmV4dCA9IGRoaV9yZXE7CisgICAgICAgICAgICBESElfU1RBVEVfRVhFQyAgICAgIDogZGhpX2ZzbV9uZXh0ID0gY21kX3Jlc3Bfb2sgICAgICA/IERISV9TVEFURV9FWEVDX1JVTiAgIDogREhJX1NUQVRFX0VYRUM7CisgICAgICAgICAgICBESElfU1RBVEVfRVhFQ19SVU4gIDogZGhpX2ZzbV9uZXh0ID0gaGFydF9zdGF0ZV9kcnVuICA/IERISV9TVEFURV9FWEVDX0hBTFQgIDogREhJX1NUQVRFX0VYRUNfUlVOOworICAgICAgICAgICAgREhJX1NUQVRFX0hBTFRfUkVRICA6IGRoaV9mc21fbmV4dCA9IGNtZF9yZXNwX29rICAgICAgPyBESElfU1RBVEVfRVhFQ19IQUxUICA6IERISV9TVEFURV9IQUxUX1JFUTsKKyAgICAgICAgICAgIERISV9TVEFURV9FWEVDX0hBTFQgOiBkaGlfZnNtX25leHQgPSBoYXJ0X3N0YXRlX2RoYWx0ID8gREhJX1NUQVRFX0lETEUgICAgICAgOiBESElfU1RBVEVfRVhFQ19IQUxUOworICAgICAgICAgICAgREhJX1NUQVRFX1JFU1VNRV9SRVE6IGRoaV9mc21fbmV4dCA9IGNtZF9yZXNwX29rICAgICAgPyBESElfU1RBVEVfUkVTVU1FX1JVTiA6IERISV9TVEFURV9SRVNVTUVfUkVROworICAgICAgICAgICAgREhJX1NUQVRFX1JFU1VNRV9SVU46IGRoaV9mc21fbmV4dCA9IGhhcnRfc3RhdGVfcnVuICAgPyBESElfU1RBVEVfSURMRSAgICAgICA6IERISV9TVEFURV9SRVNVTUVfUlVOOworICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGRoaV9mc21fbmV4dCA9IGRoaV9mc21fZmY7CisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAvLyBJbiBjYXNlIG9mIERNIHJlc2V0IG9yIGNvcmUgdW5leHBlY3RlZCByZXNldAorICAgICAgICBkaGlfZnNtX25leHQgPSBESElfU1RBVEVfSURMRTsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gZGhpX2ZzbV9pZGxlICAgICAgID0gKGRoaV9mc21fZmYgPT0gREhJX1NUQVRFX0lETEUpOworYXNzaWduIGRoaV9mc21faGFsdF9yZXEgICA9IChkaGlfZnNtX2ZmID09IERISV9TVEFURV9IQUxUX1JFUSk7Cithc3NpZ24gZGhpX2ZzbV9leGVjICAgICAgID0gKGRoaV9mc21fZmYgPT0gREhJX1NUQVRFX0VYRUMpOworYXNzaWduIGRoaV9mc21fZXhlY19oYWx0ICA9IChkaGlfZnNtX2ZmID09IERISV9TVEFURV9FWEVDX0hBTFQpOworYXNzaWduIGRoaV9mc21fcmVzdW1lX3JlcSA9IChkaGlfZnNtX2ZmID09IERISV9TVEFURV9SRVNVTUVfUkVRKTsKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlICgxJ2IxKQorICAgICAgICBhYnNfZXhlY19yZXFfZmY6IGRoaV9yZXEgPSBESElfU1RBVEVfRVhFQzsKKyAgICAgICAgaGFsdF9yZXFfdmQgICAgOiBkaGlfcmVxID0gREhJX1NUQVRFX0hBTFRfUkVROworICAgICAgICByZXN1bWVfcmVxX3ZkICA6IGRoaV9yZXEgPSBESElfU1RBVEVfUkVTVU1FX1JFUTsKKyAgICAgICAgZGVmYXVsdCAgICAgICAgOiBkaGlfcmVxID0gREhJX1NUQVRFX0lETEU7CisgICAgZW5kY2FzZQorZW5kCisKK2Fzc2lnbiBkaGlfcmVzcCAgICAgPSBkaGlfZnNtX2V4ZWNfaGFsdCAgICAmIGhhcnRfc3RhdGVfZGhhbHQ7Cithc3NpZ24gZGhpX3Jlc3BfZXhjID0gcGlwZTJkbV9oYXJ0X2V2ZW50X2kgJiBwaXBlMmRtX2hhcnRfc3RhdHVzX2kuZXhjZXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+cGlwZTJkbV9oYXJ0X3N0YXR1c19pLmVicmVhazsKKworLy8gSEFSVCBjb21tYW5kIHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSEFSVCBjb21tYW5kIHJlcXVlc3QgcmVnaXN0ZXIKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGhhcnRfY21kX3JlcV9mZiA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGlmIChjbGtfZW5fZG0pIGJlZ2luCisgICAgICAgIGhhcnRfY21kX3JlcV9mZiA8PSBoYXJ0X2NtZF9yZXFfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gaGFydF9jbWRfcmVxX25leHQgPSAoZGhpX2ZzbV9leGVjIHwgZGhpX2ZzbV9oYWx0X3JlcSB8IGRoaV9mc21fcmVzdW1lX3JlcSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAmIH5jbWRfcmVzcF9vayAmIGRtY29udHJvbF9kbWFjdGl2ZV9mZjsKKworLy8gSEFSVCBjb21tYW5kIHJlZ2lzdGVyCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBoYXJ0X2NtZF9mZiA8PSBTQ1IxX0hEVV9EQkdTVEFURV9SVU47CisgICAgZW5kIGVsc2UgaWYgKGNsa19lbl9kbSkgYmVnaW4KKyAgICAgICAgaGFydF9jbWRfZmYgPD0gaGFydF9jbWRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGhhcnRfY21kX25leHQgPSBTQ1IxX0hEVV9EQkdTVEFURV9SVU47CisgICAgaWYgKGRtY29udHJvbF9kbWFjdGl2ZV9mZikgYmVnaW4KKyAgICAgICAgY2FzZSAoZGhpX2ZzbV9mZikKKyAgICAgICAgICAgIERISV9TVEFURV9FWEVDICAgICAgOiBoYXJ0X2NtZF9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfRFJVTjsKKyAgICAgICAgICAgIERISV9TVEFURV9IQUxUX1JFUSAgOiBoYXJ0X2NtZF9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfREhBTFRFRDsKKyAgICAgICAgICAgIERISV9TVEFURV9SRVNVTUVfUkVROiBoYXJ0X2NtZF9uZXh0ID0gU0NSMV9IRFVfREJHU1RBVEVfUlVOOworICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICA6IGhhcnRfY21kX25leHQgPSBkbTJwaXBlX2NtZF9vOworICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYXNzaWduIGRtMnBpcGVfY21kX3JlcV9vID0gaGFydF9jbWRfcmVxX2ZmOworYXNzaWduIGRtMnBpcGVfY21kX28gICAgID0gaGFydF9jbWRfZmY7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWJ1ZyBIYXJ0IEludGVyZmFjZSA6IHByb2dyYW0gYnVmZmVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBQcm9ncmFtIEJ1ZmZlciBleGVjdXRpb24gRUJSRUFLIGZsYWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChjbGtfZW5fZG0pIGhhcnRfcGJ1Zl9lYnJlYWtfZmYgPD0gaGFydF9wYnVmX2VicmVha19uZXh0OworZW5kCisKK2Fzc2lnbiBoYXJ0X3BidWZfZWJyZWFrX25leHQgPSBhYnNfZnNtX2V4ZWMgJiAoZG0ycGlwZV9wYnVmX2luc3RyX28gPT0gQUJTX0VYRUNfRUJSRUFLKTsKKworLy8gUHJvZ3JhbSBCdWZmZXIgaW5zdHJ1Y3Rpb24gbXVsdGlwbGV4ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZG0ycGlwZV9wYnVmX2luc3RyX28gPSBBQlNfRVhFQ19FQlJFQUs7CisKKyAgICBpZiAoYWJzX2ZzbV9leGVjICYgfmhhcnRfcGJ1Zl9lYnJlYWtfZmYpIGJlZ2luCisgICAgICAgIGNhc2UgKHBpcGUyZG1fcGJ1Zl9hZGRyX2kpCisgICAgICAgICAgICAzJ2gwOiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmMF9mZjsKKyAgICAgICAgICAgIDMnaDE6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWYxX2ZmOworICAgICAgICAgICAgMydoMjogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjJfZmY7CisgICAgICAgICAgICAzJ2gzOiBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19wcm9nYnVmM19mZjsKKyAgICAgICAgICAgIDMnaDQ6IGRtMnBpcGVfcGJ1Zl9pbnN0cl9vID0gYWJzX3Byb2didWY0X2ZmOworICAgICAgICAgICAgMydoNTogZG0ycGlwZV9wYnVmX2luc3RyX28gPSBhYnNfcHJvZ2J1ZjVfZmY7CisgICAgICAgICAgICBkZWZhdWx0OiA7CisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQgZWxzZSBpZiAocGlwZTJkbV9wYnVmX2FkZHJfaSA9PSAzJ2IwKSBiZWdpbgorICAgICAgICBkbTJwaXBlX3BidWZfaW5zdHJfbyA9IGFic19leGVjX2luc3RyX2ZmOworICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWJ1ZyBIYXJ0IEludGVyZmFjZSA6IGFic3RyYWN0IGNvbW1hbmQgZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIGRtMnBpcGVfZHJlZ19yZXNwX28gID0gMSdiMTsKK2Fzc2lnbiBkbTJwaXBlX2RyZWdfZmFpbF9vICA9IDEnYjA7Cithc3NpZ24gZG0ycGlwZV9kcmVnX3JkYXRhX28gPSBhYnNfZnNtX3VzZV9hZGRyID8gYWJzX2RhdGExX2ZmIDogYWJzX2RhdGEwX2ZmOworCitgaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTVkFfRE1fWF9DT05UUk9MIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKHtkbWkyZG1fcmVxX2ksIHBpcGUyZG1fZHJlZ19yZXFfaSwgcGlwZTJkbV9jbWRfcmVzcF9pLAorICAgICAgICAgICAgICAgICBwaXBlMmRtX2hhcnRfZXZlbnRfaX0pCispIGVsc2UgJGVycm9yKCJETSBlcnJvcjogY29udHJvbCBzaWduYWxzIGlzIFggLSAlMGIiLCB7ZG1pMmRtX3JlcV9pLAorICAgICAgICAgICAgICBwaXBlMmRtX2RyZWdfcmVxX2ksIHBpcGUyZG1fY21kX3Jlc3BfaSwgcGlwZTJkbV9oYXJ0X2V2ZW50X2l9KTsKKworU1ZBX0RNX1hfRE1JIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGRtaTJkbV9yZXFfaSB8LT4gISRpc3Vua25vd24oe2RtaTJkbV93cl9pLCBkbWkyZG1fYWRkcl9pLCBkbWkyZG1fd2RhdGFfaX0pCispIGVsc2UgJGVycm9yKCJETSBlcnJvcjogZGF0YSBzaWduYWxzIGlzIFggb24gZG1pIik7CisKK1NWQV9ETV9YX0hBUlRfUEJVRiA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICAhJGlzdW5rbm93biAocGlwZTJkbV9wYnVmX2FkZHJfaSkKKykgZWxzZSAkZXJyb3IoIkRNIGVycm9yOiBkYXRhIHNpZ25hbHMgaXMgWCBvbiBoYXJ0X3BidWYiKTsKKworU1ZBX0RNX1hfSEFSVF9EUkVHIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIHBpcGUyZG1fZHJlZ19yZXFfaSB8LT4gISRpc3Vua25vd24oe3BpcGUyZG1fZHJlZ193cl9pLCBwaXBlMmRtX2RyZWdfd2RhdGFfaX0pCispIGVsc2UgJGVycm9yKCJETSBlcnJvcjogZGF0YSBzaWduYWxzIGlzIFggb24gaGFydF9kcmVnIik7CisKK1NWQV9ETV9YX0hBUlRfQ01EIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIHBpcGUyZG1fY21kX3Jlc3BfaSB8LT4gISRpc3Vua25vd24oe3BpcGUyZG1fY21kX3Jjb2RlX2l9KQorKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGRhdGEgc2lnbmFscyBpcyBYIG9uIGRtMnBpcGVfY21kX28iKTsKKworU1ZBX0RNX1hfSEFSVF9FVkVOVCA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykgZGlzYWJsZSBpZmYgKH5yc3RfbikKKyAgICBwaXBlMmRtX2hhcnRfZXZlbnRfaSB8LT4gISRpc3Vua25vd24ocGlwZTJkbV9oYXJ0X3N0YXR1c19pKQorKSBlbHNlICRlcnJvcigiRE0gZXJyb3I6IGRhdGEgc2lnbmFscyBpcyBYIG9uIHBpcGUyZG1faGFydF9ldmVudF9pIik7CisKK2BlbmRpZiAvLyBTQ1IxX1RSR1RfU0lNVUxBVElPTgorCitlbmRtb2R1bGUgOiBzY3IxX2RtCisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX2RtaS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyYzJhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YKQEAgLTAsMCArMSwxODIgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfZG1pLnN2PgorLy8vIEBicmllZiAgICAgIERlYnVnIE1vZHVsZSBJbnRlcmZhY2UgKERNSSkKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vCisgLy8gRnVuY3Rpb25hbGl0eToKKyAvLyAtIFByb3ZpZGVzIFRBUEMgd2l0aCBhY2Nlc3MgdG8gRGVidWcgTW9kdWxlIChETSkgYW5kIERUTUNTCisgLy8KKyAvLyBTdHJ1Y3R1cmU6CisgLy8gLSBETUkgPC0+IFRBUCBpbnRlcmZhY2UKKyAvLyAtIERNSSA8LT4gRE0gaW50ZXJmYWNlCisgLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX2RtLnN2aCIKKworbW9kdWxlIHNjcjFfZG1pICgKKyAgICAvLyBTeXN0ZW0KKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgLy8gRE1JIHVuaXQgcmVzZXQKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgLy8gRE1JIHVuaXQgY2xvY2sKKworICAgIC8vIFRBUCBpbnRlcmZhY2UKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX2ksICAgICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBTZWxlY3QKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICB0YXBjc3luYzJkbWlfY2hfaWRfaSwgICAgICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBJRAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF9jYXB0dXJlX2ksICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIENhcHR1cmUKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2hpZnRfaSwgICAgLy8gRGVidWcgVHJhbnNwb3J0IE1vZHVsZSBDaGFpbiBTaGlmdAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF91cGRhdGVfaSwgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIFVwZGF0ZQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF90ZGlfaSwgICAgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIFRESQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaTJ0YXBjc3luY19jaF90ZG9fbywgICAgICAvLyBEZWJ1ZyBUcmFuc3BvcnQgTW9kdWxlIENoYWluIFRETworCisgICAgLy8gRE0gaW50ZXJmYWNlCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG0yZG1pX3Jlc3BfaSwgICAgICAgICAgICAgIC8vIERNSSByZXNwb25zZQorICAgIGlucHV0IGxvZ2ljIFtTQ1IxX0RCR19ETUlfREFUQV9XSURUSC0xOjBdICAgICAgIGRtMmRtaV9yZGF0YV9pLCAgICAgICAgICAgICAvLyBETUkgcmVhZCBkYXRhCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pMmRtX3JlcV9vLCAgICAgICAgICAgICAgIC8vIERNSSByZXF1ZXN0CisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pMmRtX3dyX28sICAgICAgICAgICAgICAgIC8vIERNSSB3cml0ZQorICAgIG91dHB1dCBsb2dpYyBbU0NSMV9EQkdfRE1JX0FERFJfV0lEVEgtMTowXSAgICAgIGRtaTJkbV9hZGRyX28sICAgICAgICAgICAgICAvLyBETUkgYWRkcmVzcworICAgIG91dHB1dCBsb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgIGRtaTJkbV93ZGF0YV9vICAgICAgICAgICAgICAvLyBETUkgd3JpdGUgZGF0YQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHBhcmFtZXRlcnMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIERlYnVnIFRyYW5zcG9ydCBNb2R1bGUgU3RhdHVzIHBhcmFtZXRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvY2FscGFyYW0gICAgRFRNQ1NfUkVTRVJWRURCX0hJID0gNSdkMzE7Citsb2NhbHBhcmFtICAgIERUTUNTX1JFU0VSVkVEQl9MTyA9IDUnZDE4OworbG9jYWxwYXJhbSAgICBEVE1DU19ETUlIQVJEUkVTRVQgPSA1J2QxNzsKK2xvY2FscGFyYW0gICAgRFRNQ1NfRE1JUkVTRVQgICAgID0gNSdkMTY7Citsb2NhbHBhcmFtICAgIERUTUNTX1JFU0VSVkVEQSAgICA9IDUnZDE1OworbG9jYWxwYXJhbSAgICBEVE1DU19JRExFX0hJICAgICAgPSA1J2QxNDsKK2xvY2FscGFyYW0gICAgRFRNQ1NfSURMRV9MTyAgICAgID0gNSdkMTI7Citsb2NhbHBhcmFtICAgIERUTUNTX0RNSVNUQVRfSEkgICA9IDUnZDExOworbG9jYWxwYXJhbSAgICBEVE1DU19ETUlTVEFUX0xPICAgPSA1J2QxMDsKK2xvY2FscGFyYW0gICAgRFRNQ1NfQUJJVFNfSEkgICAgID0gNSdkOTsKK2xvY2FscGFyYW0gICAgRFRNQ1NfQUJJVFNfTE8gICAgID0gNSdkNDsKK2xvY2FscGFyYW0gICAgRFRNQ1NfVkVSU0lPTl9ISSAgID0gNSdkMzsKK2xvY2FscGFyYW0gICAgRFRNQ1NfVkVSU0lPTl9MTyAgID0gNSdkMDsKKworLy8gRGVidWcgTW9kdWxlIEludGVyZmFjZSBwYXJhbWV0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2NhbHBhcmFtICAgIERNSV9PUF9MTyAgID0gNSdkMDsKK2xvY2FscGFyYW0gICAgRE1JX09QX0hJICAgPSBETUlfT1BfTE8gICArIFNDUjFfREJHX0RNSV9PUF9XSURUSCAgIC0gMTsKK2xvY2FscGFyYW0gICAgRE1JX0RBVEFfTE8gPSBETUlfT1BfSEkgICArIDE7Citsb2NhbHBhcmFtICAgIERNSV9EQVRBX0hJID0gRE1JX0RBVEFfTE8gKyBTQ1IxX0RCR19ETUlfREFUQV9XSURUSCAtIDE7Citsb2NhbHBhcmFtICAgIERNSV9BRERSX0xPID0gRE1JX0RBVEFfSEkgKyAxOworbG9jYWxwYXJhbSAgICBETUlfQUREUl9ISSA9IERNSV9BRERSX0xPICsgU0NSMV9EQkdfRE1JX0FERFJfV0lEVEggLSAxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVEFQIGRhdGEgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZHJfdXBkOworbG9naWMgW1NDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRILTE6MF0gICAgICAgIHRhcF9kcl9mZjsKK2xvZ2ljIFtTQ1IxX0RCR19ETUlfRFJfRE1JX0FDQ0VTU19XSURUSC0xOjBdICAgICAgICB0YXBfZHJfc2hpZnQ7Citsb2dpYyBbU0NSMV9EQkdfRE1JX0RSX0RNSV9BQ0NFU1NfV0lEVEgtMTowXSAgICAgICAgdGFwX2RyX3JkYXRhOworbG9naWMgW1NDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRILTE6MF0gICAgICAgIHRhcF9kcl9uZXh0OworCisvLyBETSByZWFkIGRhdGEgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9yZGF0YV91cGQ7Citsb2dpYyBbU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgZG1fcmRhdGFfZmY7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RtaV9hY2Nlc3NfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfZHRtY3Nfc2VsOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRE1JIDwtPiBUQVAgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBUQVBDIHJlYWQgZGF0YSBtdWx0aXBsZXhlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHRhcGNfZHRtY3Nfc2VsID0gKHRhcGNzeW5jMmRtaV9jaF9pZF9pID09IDEnZDEpOworCisvLyBETUkgb3BlcmF0aW9uIGlzIGFsd2F5cyBzdWNjZXNzZnVsIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCithbHdheXNfY29tYiBiZWdpbgorICAgIHRhcF9kcl9yZGF0YSA9ICcwOworCisgICAgaWYodGFwY19kdG1jc19zZWwpIGJlZ2luCisgICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19SRVNFUlZFREJfSEk6RFRNQ1NfUkVTRVJWRURCX0xPXSA9ICdiMDsKKyAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX0RNSUhBUkRSRVNFVF0gICAgICAgICAgICAgICAgICAgID0gJ2IwOworICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfRE1JUkVTRVRdICAgICAgICAgICAgICAgICAgICAgICAgPSAnYjA7CisgICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19SRVNFUlZFREFdICAgICAgICAgICAgICAgICAgICAgICA9ICdiMDsKKyAgICAgICAgdGFwX2RyX3JkYXRhW0RUTUNTX0lETEVfSEk6RFRNQ1NfSURMRV9MT10gICAgICAgICAgID0gJ2IwOworICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfRE1JU1RBVF9ISTpEVE1DU19ETUlTVEFUX0xPXSAgICAgPSAnYjA7CisgICAgICAgIHRhcF9kcl9yZGF0YVtEVE1DU19BQklUU19ISSAgOkRUTUNTX0FCSVRTX0xPXSAgICAgICA9IFNDUjFfREJHX0RNSV9BRERSX1dJRFRIOworICAgICAgICB0YXBfZHJfcmRhdGFbRFRNQ1NfVkVSU0lPTl9MT10gICAgICAgICAgICAgICAgICAgICAgPSAxJ2IxOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRhcF9kcl9yZGF0YVtETUlfQUREUl9ISTpETUlfQUREUl9MT10gICAgICAgICAgICAgICA9ICdiMDsKKyAgICAgICAgdGFwX2RyX3JkYXRhW0RNSV9EQVRBX0hJOkRNSV9EQVRBX0xPXSAgICAgICAgICAgICAgID0gZG1fcmRhdGFfZmY7CisgICAgICAgIHRhcF9kcl9yZGF0YVtETUlfT1BfSEkgIDpETUlfT1BfTE9dICAgICAgICAgICAgICAgICA9ICdiMDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gdGFwX2RyX3NoaWZ0ID0gdGFwY19kdG1jc19zZWwKKyAgICAgICAgICAgICAgICAgICAgPyB7OSdiMCwgdGFwY3N5bmMyZG1pX2NoX3RkaV9pLCB0YXBfZHJfZmZbU0NSMV9EQkdfRE1JX0RSX0RUTUNTX1dJRFRILTE6MV19CisgICAgICAgICAgICAgICAgICAgIDoge3RhcGNzeW5jMmRtaV9jaF90ZGlfaSwgdGFwX2RyX2ZmW1NDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRILTE6MV19OworCisvLyBUQVAgZGF0YSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHRhcF9kcl91cGQgPSB0YXBjc3luYzJkbWlfY2hfY2FwdHVyZV9pIHwgdGFwY3N5bmMyZG1pX2NoX3NoaWZ0X2k7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHRhcF9kcl9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZih0YXBfZHJfdXBkKSBiZWdpbgorICAgICAgICB0YXBfZHJfZmYgPD0gdGFwX2RyX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHRhcF9kcl9uZXh0ID0gdGFwY3N5bmMyZG1pX2NoX2NhcHR1cmVfaSA/IHRhcF9kcl9yZGF0YQorICAgICAgICAgICAgICAgICAgIDogdGFwY3N5bmMyZG1pX2NoX3NoaWZ0X2kgICA/IHRhcF9kcl9zaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9kcl9mZjsKKworYXNzaWduIGRtaTJ0YXBjc3luY19jaF90ZG9fbyA9IHRhcF9kcl9mZlswXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERNSSA8LT4gRE0gaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3NpZ24gdGFwY19kbWlfYWNjZXNzX3JlcSA9IHRhcGNzeW5jMmRtaV9jaF91cGRhdGVfaSAmIHRhcGNzeW5jMmRtaV9jaF9zZWxfaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAodGFwY3N5bmMyZG1pX2NoX2lkX2kgPT0gMidkMik7CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgZG1pMmRtX3JlcV9vICAgICAgICAgICA9IDEnYjA7CisgICAgZG1pMmRtX3dyX28gICAgICAgICAgICA9IDEnYjA7CisgICAgZG1pMmRtX2FkZHJfbyAgICAgICAgICA9IDEnYjA7CisgICAgZG1pMmRtX3dkYXRhX28gICAgICAgICA9IDEnYjA7CisKKyAgICBpZih0YXBjX2RtaV9hY2Nlc3NfcmVxKSBiZWdpbgorICAgICAgICBkbWkyZG1fcmVxX28gICA9IHRhcF9kcl9mZltETUlfT1BfSEkgIDpETUlfT1BfTE9dICE9IDInYjAwOworICAgICAgICBkbWkyZG1fd3JfbyAgICA9IHRhcF9kcl9mZltETUlfT1BfSEkgIDpETUlfT1BfTE9dID09IDInYjEwOworICAgICAgICBkbWkyZG1fYWRkcl9vICA9IHRhcF9kcl9mZltETUlfQUREUl9ISTpETUlfQUREUl9MT107CisgICAgICAgIGRtaTJkbV93ZGF0YV9vID0gdGFwX2RyX2ZmW0RNSV9EQVRBX0hJOkRNSV9EQVRBX0xPXTsKKyAgICBlbmQKK2VuZAorCisvLyBETSByZWFkIGRhdGEgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBkbV9yZGF0YV91cGQgPSBkbWkyZG1fcmVxX28gJiBkbTJkbWlfcmVzcF9pICYgfmRtaTJkbV93cl9vOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBkbV9yZGF0YV9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoZG1fcmRhdGFfdXBkKSBiZWdpbgorICAgICAgICBkbV9yZGF0YV9mZiA8PSBkbTJkbWlfcmRhdGFfaTsKKyAgICBlbmQKK2VuZAorCitlbmRtb2R1bGUgOiBzY3IxX2RtaQorCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV9zY3Uuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0NGVlNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2CkBAIC0wLDAgKzEsNTE2IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlIDxzY3IxX3NjdS5zdj4KKy8vLyBAYnJpZWYgU3lzdGVtIENvbnRyb2wgVW5pdCAoU0NVKQorLy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8KKyAvLyBGdW5jdGlvbmFsaXR5OgorIC8vIC0gR2VuZXJhdGVzIFN5c3RlbSwgQ29yZSwgSERVIGFuZCBETSByZXNldHMgYW5kIHRoZWlyIHF1YWxpZmllciBzaWduYWxzCisgLy8gLSBQcm92aWRlcyBkZWJ1Z2dlciB3aXRoIHNvZnR3YXJlIFN5c3RlbSBhbmQgQ29yZSByZXNldHMgZ2VuZXJhdGlvbiBmdW5jdGlvbmFsaXR5CisgLy8gLSBBbGxvd3MgdG8gc2V0IHRoZSBiZWhhdmlvciBvZiBETSBhbmQgSERVIHJlc2V0cworIC8vIC0gU2hvd3MgcmVzZXRzIFN0YXR1c2VzIGFuZCBTdGlja3kgU3RhdHVzZXMKKworIC8vIFN0cnVjdHVyZToKKyAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBpbnRlcmZhY2UKKyAvLyAtIFNDVSBDU1JzIHdyaXRlL3JlYWQgaW50ZXJmYWNlCisgLy8gLSBTQ1UgQ1NSUzoKKyAvLyAgIC0gQ09OVFJPTCByZWdpc3RlcgorIC8vICAgLSBNT0RFIHJlZ2lzdGVyCisgLy8gICAtIFNUQVRVUyByZWdpc3RlcgorIC8vICAgLSBTVElDS1lfU1RBVFVTIHJlZ2lzdGVyCisgLy8gLSBSZXNldCBsb2dpYworIC8vICAgLSBTeXN0ZW0gUmVzZXQKKyAvLyAgIC0gQ29yZSBSZXNldAorIC8vICAgLSBETSBSZXNldAorIC8vICAgLSBIRFUgUmVzZXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorYGluY2x1ZGUgInNjcjFfc2N1LnN2aCIKKworYGlmZGVmIFNDUjFfREJHX0VOCisKK21vZHVsZSBzY3IxX3NjdSAoCisgICAgLy8gR2xvYmFsIHNpZ25hbHMKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHB3cnVwX3JzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICBjcHVfcnN0X24sICAgICAgICAgICAgICAgICAgICAvLyBDUFUgUmVzZXQKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IE1vZGUKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHRlc3RfcnN0X24sICAgICAgICAgICAgICAgICAgIC8vIERGVCBUZXN0IFJlc2V0CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICBjbGssICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTQ1UgY2xvY2sKKworICAgIC8vIFRBUEMgc2Nhbi1jaGFpbnMKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zZWxfaSwgICAgICAgIC8vIFRBUEMgQ2hhaW4gU2VsZWN0CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfaWRfaSwgICAgICAgICAvLyBUQVBDIENoYWluIElECisgICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pLCAgICAvLyBUQVBDIENoYWluIENhcHR1cmUKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pLCAgICAgIC8vIFRBUEMgQ2hhaW4gU2hpZnQKKyAgICBpbnB1dCAgbG9naWMgICAgICAgIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaSwgICAgIC8vIFRBUEMgQ2hhaW4gVXBkYXRlCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICB0YXBjc3luYzJzY3VfY2hfdGRpX2ksICAgICAgICAvLyBUQVBDIENoYWluIFRESQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgc2N1MnRhcGNzeW5jX2NoX3Rkb19vLCAgICAgICAgLy8gVEFQQyBDaGFpbiBURE8KKworICAgIC8vIElucHV0IHN5bmMgcmVzZXRzOgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgbmRtX3JzdF9uX2ksICAgICAgICAgICAgICAgICAgLy8gTm9uLURNIFJlc2V0IGlucHV0IGZyb20gRE0KKyAgICBpbnB1dCAgbG9naWMgICAgICAgIGhhcnRfcnN0X25faSwgICAgICAgICAgICAgICAgIC8vIEhBUlQgUmVzZXQgZnJvbSBETQorCisgICAgLy8gR2VuZXJhdGVkIHJlc2V0cworICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXIgUmVzZXQKKyAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X25fbywgICAgICAgICAgICAgICAgIC8vIENvcmUgUmVzZXQKKyAgICBvdXRwdXQgbG9naWMgICAgICAgIGRtX3JzdF9uX28sICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIE1vZHVsZSBSZXNldAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgaGR1X3JzdF9uX28sICAgICAgICAgICAgICAgICAgLy8gSEFSVCBEZWJ1ZyBVbml0IFJlc2V0CisKKyAgICAvLyBSZXNldHMgc3RhdHVzZXMKKyAgICBvdXRwdXQgbG9naWMgICAgICAgIHN5c19yc3Rfc3RhdHVzX28sICAgICAgICAgICAgIC8vIFN5c3RlbSBSZXNldCBTdGF0dXMgKHN5bmMnZWQgdG8gUE9SIHJlc2V0IGRvbWFpbikKKyAgICBvdXRwdXQgbG9naWMgICAgICAgIGNvcmVfcnN0X3N0YXR1c19vLCAgICAgICAgICAgIC8vIENvcmUgUmVzZXQgU3RhdHVzIChzeW5jJ2VkIHRvIFBPUiByZXNldCBkb21haW4pCisKKyAgICAvLyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgKFJEQykgcXVhbGlmaWVycworICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgICAgICAgLy8gU3lzdGVtL0NsdXN0ZXItdG8tRXh0ZXJuYWxTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgorICAgIG91dHB1dCBsb2dpYyAgICAgICAgY29yZV9yZGNfcWxmeV9vLCAgICAgICAgICAgICAgLy8gQ29yZS10by1FeHRlcm5hbFNPQyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmhkdV9yZGNfcWxmeV9vLCAgICAgICAgICAvLyBDb3JlLXRvLUhEVSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICBjb3JlMmRtX3JkY19xbGZ5X28sICAgICAgICAgICAvLyBDb3JlLXRvLURNIFJlc2V0IERvbWFpbiBDcm9zc2luZyBRdWFsaWZpZXIKKyAgICBvdXRwdXQgbG9naWMgICAgICAgIGhkdTJkbV9yZGNfcWxmeV9vICAgICAgICAgICAgIC8vIEhEVS10by1ETSBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgUGFyYW1ldGVycworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1NDVV9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICA9IDI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBTaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBUQVBDIHNjYW4tY2hhaW4gY29udHJvbCBsb2dpYworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3VfY3NyX3JlcTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY19kcl9jYXBfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3NoZnRfcmVxOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX2RyX3VwZF9yZXE7CisKKy8vIFRBUEMgc2hpZnQgcmVnaXN0ZXIgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3NoaWZ0X3VwZDsKK3R5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9mZjsKK3R5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zICAgICAgICAgICAgICAgICAgdGFwY19zaGlmdF9uZXh0OworCisvLyBUQVBDIHNoYWRvdyByZWdpc3RlciBzaWduYWxzCit0eXBlX3NjcjFfc2N1X3N5c2N0cmxfZHJfcyAgICAgICAgICAgICAgICAgIHRhcGNfc2hhZG93X2ZmOworCisvLyBTQ1UgQ1NSIHdyaXRlL3JlYWQgaS9mCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3Jfd2RhdGE7Citsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIHNjdV9jc3JfcmRhdGE7CisKKy8vIFNDVSBDU1JzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENvbnRyb2wgcmVnaXN0ZXIKK3R5cGVfc2NyMV9zY3Vfc3lzY3RybF9jb250cm9sX3JlZ19zICAgICAgICAgc2N1X2NvbnRyb2xfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdV9jb250cm9sX3dyX3JlcTsKKworLy8gTW9kZSByZWdpc3RlcgordHlwZV9zY3IxX3NjdV9zeXNjdHJsX21vZGVfcmVnX3MgICAgICAgICAgICBzY3VfbW9kZV9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X21vZGVfd3JfcmVxOworCisvLyBTdGF0dXMgcmVnaXN0ZXIKK3R5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZjsKK3R5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MgICAgICAgICAgc2N1X3N0YXR1c19mZl9kbHk7Cit0eXBlX3NjcjFfc2N1X3N5c2N0cmxfc3RhdHVzX3JlZ19zICAgICAgICAgIHNjdV9zdGF0dXNfZmZfcG9zZWRnZTsKKworLy8gU3RpY2t5IFN0YXR1cyByZWdpc3RlcgordHlwZV9zY3IxX3NjdV9zeXNjdHJsX3N0YXR1c19yZWdfcyAgICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N1X3N0aWNreV9zdHNfd3JfcmVxOworCisvLyBSZXNldCBsb2dpYyBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJbnB1dCByZXNldHMgc3luY2hyb25pemF0aW9uIHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uX3N5bmM7CisKKy8vIFN5c3RlbSBSZXNldCBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yc3Rfbl9pbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1czsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX3N0YXR1c19zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fcWxmeTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3Jlc2V0X247CisKKy8vIENvcmUgUmVzZXQgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2luX3N5bmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fc3RhdHVzOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3N0YXR1c19zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX3FsZnk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzZXRfbjsKKworLy8gSERVIFJlc2V0IHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX2luX3N5bmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkdV9yc3Rfbl9zdGF0dXNfc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGR1X3JzdF9uX3FsZnk7CisKKy8vIERNIFJlc2V0IHNpZ25hbHMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnN0X25faW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtX3JzdF9uX3N0YXR1czsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRBUEMgc2Nhbi1jaGFpbiBpL2YKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0czoKKyAvLyAtIFRBUEMgc2Nhbi1jaGFpbiBjb250cm9sIGxvZ2ljCisgLy8gLSBUQVBDIHNoaWZ0IHJlZ2lzdGVyCisgLy8gLSBUQVBDIHNoYWRvdyByZWdpc3RlcgorLy8KKworLy8gVEFQQyBzY2FuLWNoYWluIGNvbnRyb2wgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiBzY3VfY3NyX3JlcSAgICAgID0gdGFwY3N5bmMyc2N1X2NoX3NlbF9pICYgKHRhcGNzeW5jMnNjdV9jaF9pZF9pID09ICcwKTsKK2Fzc2lnbiB0YXBjX2RyX2NhcF9yZXEgID0gc2N1X2Nzcl9yZXEgJiB0YXBjc3luYzJzY3VfY2hfY2FwdHVyZV9pOworYXNzaWduIHRhcGNfZHJfc2hmdF9yZXEgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF9zaGlmdF9pOworYXNzaWduIHRhcGNfZHJfdXBkX3JlcSAgPSBzY3VfY3NyX3JlcSAmIHRhcGNzeW5jMnNjdV9jaF91cGRhdGVfaTsKKworLy8gVEFQQyBzaGlmdCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHRhcGNfc2hpZnRfdXBkID0gdGFwY19kcl9jYXBfcmVxIHwgdGFwY19kcl9zaGZ0X3JlcTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KKyAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCisgICAgICAgIHRhcGNfc2hpZnRfZmYgPD0gJzA7CisgICAgZW5kIGVsc2UgaWYgKHRhcGNfc2hpZnRfdXBkKSBiZWdpbgorICAgICAgICB0YXBjX3NoaWZ0X2ZmIDw9IHRhcGNfc2hpZnRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gdGFwY19zaGlmdF9uZXh0ID0gdGFwY19kcl9jYXBfcmVxICA/IHRhcGNfc2hhZG93X2ZmCisgICAgICAgICAgICAgICAgICAgICAgIDogdGFwY19kcl9zaGZ0X3JlcSA/IHt0YXBjc3luYzJzY3VfY2hfdGRpX2ksIHRhcGNfc2hpZnRfZmZbJGJpdHModHlwZV9zY3IxX3NjdV9zeXNjdHJsX2RyX3MpLTE6MV19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcGNfc2hpZnRfZmY7CisKKy8vIFRBUEMgc2hhZG93IHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgorICAgIGlmICh+cHdydXBfcnN0X25fc3luYykgYmVnaW4KKyAgICAgICAgdGFwY19zaGFkb3dfZmYgICAgICA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAodGFwY19kcl91cGRfcmVxKSBiZWdpbgorICAgICAgICB0YXBjX3NoYWRvd19mZi5vcCAgIDw9IHRhcGNfc2hpZnRfZmYub3A7CisgICAgICAgIHRhcGNfc2hhZG93X2ZmLmFkZHIgPD0gdGFwY19zaGlmdF9mZi5hZGRyOworICAgICAgICB0YXBjX3NoYWRvd19mZi5kYXRhIDw9IHNjdV9jc3Jfd2RhdGE7CisgICAgZW5kCitlbmQKKworYXNzaWduIHNjdTJ0YXBjc3luY19jaF90ZG9fbyA9IHRhcGNfc2hpZnRfZmZbMF07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTQ1UgQ1NScyB3cml0ZS9yZWFkIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gV3JpdGUgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZWdpc3RlciBzZWxlY3Rpb24gbG9naWMKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgc2N1X2NvbnRyb2xfd3JfcmVxICAgID0gMSdiMDsKKyAgICBzY3VfbW9kZV93cl9yZXEgICAgICAgPSAxJ2IwOworICAgIHNjdV9zdGlja3lfc3RzX3dyX3JlcSA9IDEnYjA7CisKKyAgICBpZiAodGFwY19kcl91cGRfcmVxICYmICh0YXBjX3NoaWZ0X2ZmLm9wICE9IFNDUjFfU0NVX1NZU0NUUkxfT1BfUkVBRCkpIGJlZ2luCisgICAgICAgIGNhc2UgKHRhcGNfc2hpZnRfZmYuYWRkcikKKyAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9DT05UUk9MOiBzY3VfY29udHJvbF93cl9yZXEgICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX01PREUgICA6IHNjdV9tb2RlX3dyX3JlcSAgICAgICA9IDEnYjE7CisgICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfU1RJQ0tZIDogc2N1X3N0aWNreV9zdHNfd3JfcmVxID0gKHRhcGNfc2hpZnRfZmYub3AgPT0gU0NSMV9TQ1VfU1lTQ1RSTF9PUF9DTFJCSVRTKTsKKyAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vIFdyaXRlIGRhdGEgY29uc3RydWN0aW9uCithbHdheXNfY29tYiBiZWdpbgorICAgIHNjdV9jc3Jfd2RhdGEgPSAnMDsKKworICAgIGlmICh0YXBjX2RyX3VwZF9yZXEpIGJlZ2luCisgICAgICAgIGNhc2UgKHRhcGNfc2hpZnRfZmYub3ApCisgICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1dSSVRFICA6IHNjdV9jc3Jfd2RhdGEgPSB0YXBjX3NoaWZ0X2ZmLmRhdGE7CisgICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1JFQUQgICA6IHNjdV9jc3Jfd2RhdGEgPSBzY3VfY3NyX3JkYXRhOworICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9TRVRCSVRTOiBzY3VfY3NyX3dkYXRhID0gc2N1X2Nzcl9yZGF0YSB8ICAgdGFwY19zaGlmdF9mZi5kYXRhOworICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9DTFJCSVRTOiBzY3VfY3NyX3dkYXRhID0gc2N1X2Nzcl9yZGF0YSAmICh+dGFwY19zaGlmdF9mZi5kYXRhKTsKKyAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgIDogYmVnaW4gZW5kCisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCisvLyBSZWFkIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVhZCBkYXRhIG11bHRpcGxleGVyCithbHdheXNfY29tYiBiZWdpbgorICAgIHNjdV9jc3JfcmRhdGEgPSAnMDsKKworICAgIGlmICh0YXBjX2RyX3VwZF9yZXEpIGJlZ2luCisgICAgICAgIGNhc2UgKHRhcGNfc2hpZnRfZmYuYWRkcikKKyAgICAgICAgICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9DT05UUk9MOiBzY3VfY3NyX3JkYXRhID0gc2N1X2NvbnRyb2xfZmY7CisgICAgICAgICAgICBTQ1IxX1NDVV9TWVNDVFJMX0FERFJfTU9ERSAgIDogc2N1X2Nzcl9yZGF0YSA9IHNjdV9tb2RlX2ZmOworICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX1NUQVRVUyA6IHNjdV9jc3JfcmRhdGEgPSBzY3Vfc3RhdHVzX2ZmOworICAgICAgICAgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX1NUSUNLWSA6IHNjdV9jc3JfcmRhdGEgPSBzY3Vfc3RpY2t5X3N0c19mZjsKKyAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgOiBzY3VfY3NyX3JkYXRhID0gJ3g7CisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0NVIENTUnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworIC8vIFJlZ2lzdGVyczoKKyAvLyAtIENPTlRST0wgcmVnaXN0ZXIKKyAvLyAtIE1PREUgcmVnaXN0ZXIKKyAvLyAtIFNUQVRVUyByZWdpc3RlcgorIC8vIC0gU1RJQ0tZX1NUQVRVUyByZWdpc3RlcgorLy8KKworLy8gQ09OVFJPTCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFsbG93cyBkZWJ1Z2dlciB0byBnZW5lcmF0ZSBTeXN0ZW0gYW5kIENvcmUgcmVzZXRzCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCisgICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgorICAgICAgICBzY3VfY29udHJvbF9mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBpZiAoc2N1X2NvbnRyb2xfd3JfcmVxKSBiZWdpbgorICAgICAgICBzY3VfY29udHJvbF9mZiA8PSBzY3VfY3NyX3dkYXRhOworICAgIGVuZAorZW5kCisKKy8vIE1PREUgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTZXRzIHJlc2V0IGJlaGF2aW9yIGZvciBETSBSZXNldCBhbmQgSERVIFJlc2V0IHNpZ25hbHMKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KKyAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCisgICAgICAgIHNjdV9tb2RlX2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmIChzY3VfbW9kZV93cl9yZXEpIGJlZ2luCisgICAgICAgIHNjdV9tb2RlX2ZmIDw9IHNjdV9jc3Jfd2RhdGE7CisgICAgZW5kCitlbmQKKworLy8gU1RBVFVTIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSG9sZHMgdGhlIHN0YXR1cyBvZiBldmVyeSBvdXRwdXQgcmVzZXQgc2lnbmFsIChTeXN0ZW0sIENvcmUsIERNIGFuZCBIRFUpCisKK2Fzc2lnbiBzY3Vfc3RhdHVzX2ZmLnN5c19yZXNldCAgPSBzeXNfcnN0X3N0YXR1c19vIDsKK2Fzc2lnbiBzY3Vfc3RhdHVzX2ZmLmNvcmVfcmVzZXQgPSBjb3JlX3JzdF9zdGF0dXNfbzsKK2Fzc2lnbiBzY3Vfc3RhdHVzX2ZmLmRtX3Jlc2V0ICAgPSB+ZG1fcnN0X25fc3RhdHVzOworYXNzaWduIHNjdV9zdGF0dXNfZmYuaGR1X3Jlc2V0ICA9IH5oZHVfcnN0X25fc3RhdHVzX3N5bmM7CisKKy8vIFN0YXR1cyBSZWdpc3RlciBwb3NpdGl2ZSBlZGdlIGRldGVjdGlvbiBsb2dpYworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X25fc3luYykgYmVnaW4KKyAgICBpZiAofnB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCisgICAgICAgIHNjdV9zdGF0dXNfZmZfZGx5IDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHNjdV9zdGF0dXNfZmZfZGx5IDw9IHNjdV9zdGF0dXNfZmY7CisgICAgZW5kCitlbmQKKworYXNzaWduIHNjdV9zdGF0dXNfZmZfcG9zZWRnZSA9IHNjdV9zdGF0dXNfZmYgJiB+c2N1X3N0YXR1c19mZl9kbHk7CisKKy8vIFNUSUNLWV9TVEFUVVMgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3IgZXZlcnkgb3V0cHV0IHJlc2V0IHNpZ25hbCBzaG93cyBpZiBpdCB3YXMgYXNzZXJ0ZWQgc2luY2UgdGhlIGxhc3QgYml0IGNsZWFyaW5nCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uX3N5bmMpIGJlZ2luCisgICAgaWYgKH5wd3J1cF9yc3Rfbl9zeW5jKSBiZWdpbgorICAgICAgICBzY3Vfc3RpY2t5X3N0c19mZiA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBmb3IgKGludCB1bnNpZ25lZCBpID0gMDsgaSA8ICRiaXRzKHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3MpOyArK2kpIGJlZ2luCisgICAgICAgICAgICBpZiAoc2N1X3N0YXR1c19mZl9wb3NlZGdlW2ldKSBiZWdpbgorICAgICAgICAgICAgICAgIHNjdV9zdGlja3lfc3RzX2ZmW2ldIDw9IDEnYjE7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoc2N1X3N0aWNreV9zdHNfd3JfcmVxKSBiZWdpbgorICAgICAgICAgICAgICAgIHNjdV9zdGlja3lfc3RzX2ZmW2ldIDw9IHNjdV9jc3Jfd2RhdGFbaV07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBDb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBTeXN0ZW0gUmVzZXQgbG9naWMKKyAvLyAtIENvcmUgUmVzZXQgbG9naWMKKyAvLyAtIEhhcnQgRGVidWcgVW5pdCBSZXNldCBsb2dpYworIC8vIC0gRGVidWcgTW9kdWxlIFJlc2V0IGxvZ2ljCisvLworCisvLyBSZXNldCBpbnB1dHMgYXJlIGFzc3VtZWQgc3luY2hyb25vdXMKK2Fzc2lnbiBwd3J1cF9yc3Rfbl9zeW5jID0gcHdydXBfcnN0X247Cithc3NpZ24gcnN0X25fc3luYyAgICAgICA9IHJzdF9uOworYXNzaWduIGNwdV9yc3Rfbl9zeW5jICAgPSBjcHVfcnN0X247CisKKy8vIEludGVybWVkaWF0ZSByZXNldHM6Cithc3NpZ24gc3lzX3Jlc2V0X24gID0gfnNjdV9jb250cm9sX2ZmLnN5c19yZXNldDsKK2Fzc2lnbiBjb3JlX3Jlc2V0X24gPSB+c2N1X2NvbnRyb2xfZmYuY29yZV9yZXNldDsKKworLy8gU3lzdGVtL0NsdXN0ZXIgUmVzZXQ6IHN5c19yc3Rfbl9vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzY3IxX3Jlc2V0X3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgICBpX3N5c19yc3RuX3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMpLAorICAgIC5jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAorICAgIC50ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICApLAorICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICApLAorICAgIC5yZXNldF9uX2luX3N5bmMgICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9pbiAgICApLAorICAgIC5yZXNldF9uX291dF9xbGZ5ICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9xbGZ5ICApLAorICAgIC5yZXNldF9uX291dCAgICAgICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9vICAgICApLAorICAgIC5yZXNldF9uX3N0YXR1cyAgICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9zdGF0dXMpCispOworCithc3NpZ24gc3lzX3JzdF9uX2luID0gc3lzX3Jlc2V0X24gJiBuZG1fcnN0X25faSAmIHJzdF9uX3N5bmM7CisKK3NjcjFfZGF0YV9zeW5jX2NlbGwgIygKKyAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9TQ1VfUlNUX1NZTkNfU1RBR0VTX05VTSkKKykgaV9zeXNfcnN0bl9zdGF0dXNfc3luYyAoCisgICAgLnJzdF9uICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICksCisgICAgLmRhdGFfaW4gICAgICAgICAgICAgKHN5c19yc3Rfbl9zdGF0dXMgICAgICksCisgICAgLmRhdGFfb3V0ICAgICAgICAgICAgKHN5c19yc3Rfbl9zdGF0dXNfc3luYykKKyk7CisKK2Fzc2lnbiBzeXNfcnN0X3N0YXR1c19vID0gfnN5c19yc3Rfbl9zdGF0dXNfc3luYzsKKworLy8gU3lzdGVtL0NsdXN0ZXItdG8tRXh0ZXJuYWxTT0MgUkRDIHF1YWxpZmllcgorYXNzaWduIHN5c19yZGNfcWxmeV9vID0gc3lzX3JzdF9uX3FsZnk7CisKKy8vIENvcmUgUmVzZXQ6IGNvcmVfcnN0X25fbworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2NyMV9yZXNldF9xbGZ5X2FkYXB0ZXJfY2VsbF9zeW5jICAgaV9jb3JlX3JzdG5fcWxmeV9hZGFwdGVyX2NlbGxfc3luYyAoCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAorICAgIC50ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICAgICAodGVzdF9tb2RlICAgICAgICAgKSwKKyAgICAucmVzZXRfbl9pbl9zeW5jICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX2luX3N5bmMpLAorICAgIC5yZXNldF9uX291dF9xbGZ5ICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fcWxmeSAgICksCisgICAgLnJlc2V0X25fb3V0ICAgICAgICAgICAgICAgICAgICAoY29yZV9yc3Rfbl9vICAgICAgKSwKKyAgICAucmVzZXRfbl9zdGF0dXMgICAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX3N0YXR1cyApCispOworCithc3NpZ24gY29yZV9yc3Rfbl9pbl9zeW5jICAgPSBzeXNfcnN0X25faW4gJiBoYXJ0X3JzdF9uX2kgJiBjb3JlX3Jlc2V0X24gJiBjcHVfcnN0X25fc3luYzsKKworc2NyMV9kYXRhX3N5bmNfY2VsbCAjKAorICAgIC5TVEFHRVNfQU1PVU5UICAgICAgICAoU0NSMV9TQ1VfUlNUX1NZTkNfU1RBR0VTX05VTSkKKykgaV9jb3JlX3JzdG5fc3RhdHVzX3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAocHdydXBfcnN0X25fc3luYyAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgKSwKKyAgICAuZGF0YV9pbiAgICAgICAgICAgICAgKGNvcmVfcnN0X25fc3RhdHVzICAgICApLAorICAgIC5kYXRhX291dCAgICAgICAgICAgICAoY29yZV9yc3Rfbl9zdGF0dXNfc3luYykKKyk7CisKK2Fzc2lnbiBjb3JlX3JzdF9zdGF0dXNfbyA9IH5jb3JlX3JzdF9uX3N0YXR1c19zeW5jOworCisvLyBDb3JlIFJlc2V0IFJEQyBRdWFsaWZpZXJzOgorLy8gIC0gQ29yZS10by1FeHRlcm5hbFNPQyBSREMgUWxmeQorYXNzaWduIGNvcmVfcmRjX3FsZnlfbyA9IGNvcmVfcnN0X25fcWxmeTsKKy8vICAtIENvcmUtdG8tSERVIFJEQyBRbGZ5Cithc3NpZ24gY29yZTJoZHVfcmRjX3FsZnlfbyA9IGNvcmVfcnN0X25fcWxmeTsKKy8vICAtIENvcmUtdG8tRGVidWdNb2R1bGUgUkRDIFFsZnkKK2Fzc2lnbiBjb3JlMmRtX3JkY19xbGZ5X28gID0gY29yZV9yc3Rfbl9xbGZ5OworCisvLyBIYXJ0IERlYnVnIFVuaXQgUmVzZXQ6IGhkdV9yc3Rfbl9vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzY3IxX3Jlc2V0X3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgICBpX2hkdV9yc3RuX3FsZnlfYWRhcHRlcl9jZWxsX3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCisgICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICAgICAodGVzdF9yc3RfbiAgICAgICApLAorICAgIC50ZXN0X21vZGUgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICAgKSwKKyAgICAucmVzZXRfbl9pbl9zeW5jICAgICAgICAgICAgICAgIChoZHVfcnN0X25faW5fc3luYyksCisgICAgLnJlc2V0X25fb3V0X3FsZnkgICAgICAgICAgICAgICAoaGR1X3JzdF9uX3FsZnkgICApLAorICAgIC5yZXNldF9uX291dCAgICAgICAgICAgICAgICAgICAgKGhkdV9yc3Rfbl9vICAgICAgKSwKKyAgICAucmVzZXRfbl9zdGF0dXMgICAgICAgICAgICAgICAgIChoZHVfcnN0X25fc3RhdHVzICkKKyk7CisKK2Fzc2lnbiBoZHVfcnN0X25faW5fc3luYyA9IHNjdV9tb2RlX2ZmLmhkdV9yc3RfYmh2IHwgY29yZV9yc3Rfbl9pbl9zeW5jOworCitzY3IxX2RhdGFfc3luY19jZWxsICMoCisgICAgLlNUQUdFU19BTU9VTlQgICAgICAgKFNDUjFfU0NVX1JTVF9TWU5DX1NUQUdFU19OVU0pCispIGlfaGR1X3JzdG5fc3RhdHVzX3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICApLAorICAgIC5kYXRhX2luICAgICAgICAgICAgIChoZHVfcnN0X25fc3RhdHVzICAgICApLAorICAgIC5kYXRhX291dCAgICAgICAgICAgIChoZHVfcnN0X25fc3RhdHVzX3N5bmMpCispOworCisvLyBIYXJ0IERlYnVnIFVuaXQgUmVzZXQgUkRDIFF1YWxpZmllcnM6CisvLyAgLSBIRFUtdG8tRGVidWdNb2R1bGUgUkRDIFFsZnkKK2Fzc2lnbiBoZHUyZG1fcmRjX3FsZnlfbyA9IGhkdV9yc3Rfbl9xbGZ5OworCisvLyBEZWJ1ZyBNb2R1bGUgUmVzZXQ6IGRtX3JzdF9uX28KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NjcjFfcmVzZXRfYnVmX2NlbGwgaV9kbV9yc3RuX2J1Zl9jZWxsICgKKyAgICAucnN0X24gICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgKSwKKyAgICAucmVzZXRfbl9pbiAgICAgICAgIChkbV9yc3Rfbl9pbiAgICAgKSwKKyAgICAucmVzZXRfbl9vdXQgICAgICAgIChkbV9yc3Rfbl9vICAgICAgKSwKKyAgICAucmVzZXRfbl9zdGF0dXMgICAgIChkbV9yc3Rfbl9zdGF0dXMgKQorKTsKKworYXNzaWduIGRtX3JzdF9uX2luICA9IH5zY3VfbW9kZV9mZi5kbV9yc3RfYmh2IHwgc3lzX3Jlc2V0X247CisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQXNzZXJ0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgaWZuZGVmIFZFUklMQVRPUgorLy8gUHJldmVudGluZyBzb21lIGFzc2VydGlvbnMgdG8gYmUgcmFpc2VkIGF0IDAgc2ltIHRpbWUgb3IgaW4gdGhlIGZpcnN0IGN5Y2xlCitpbml0aWFsIGJlZ2luCiskYXNzZXJ0b2ZmKDAsIHNjcjFfc2N1KTsKK3JlcGVhdCAoMikgQChwb3NlZGdlIGNsayk7CiskYXNzZXJ0b24oMCwgc2NyMV9zY3UpOworZW5kCitgZW5kaWYgLy8gVkVSSUxBVE9SCisKKy8vIFggY2hlY2tzCitTQ1IxX1NWQV9TQ1VfUkVTRVRTX1hDSEVDSyA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIGNsaykKKyAgICAhJGlzdW5rbm93bih7cHdydXBfcnN0X24sIHJzdF9uLCBjcHVfcnN0X24sIG5kbV9yc3Rfbl9pLCBoYXJ0X3JzdF9uX2l9KQorKSBlbHNlICRlcnJvcigiU0NVIHJlc2V0cyBlcnJvcjogdW5rbm93biB2YWx1ZXMgb2YgaW5wdXQgcmVzZXRzIik7CisKKy8vIFF1YWxpZmllcnMgY2hlY2tzCitTQ1IxX1NWQV9TQ1VfU1lTMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQorICAgICRmZWxsKHN5c19yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3Qoc3lzX3JkY19xbGZ5X28pKQorKSBlbHNlICRlcnJvcigiU0NVIHN5czJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7CisKK1NDUjFfU1ZBX1NDVV9DT1JFMlNPQ19RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQorICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmVfcmRjX3FsZnlfbykpCispIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJzb2MgcWxmeSBlcnJvcjogcWxmeSB3YXNuJ3QgcmFpc2VkIHByaW9yIHRvIHJlc2V0Iik7CisKK1NDUjFfU1ZBX1NDVV9DT1JFMkhEVV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQorICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyaGR1X3JkY19xbGZ5X28pKQorKSBlbHNlICRlcnJvcigiU0NVIGNvcmUyaGR1IHFsZnkgZXJyb3I6IHFsZnkgd2Fzbid0IHJhaXNlZCBwcmlvciB0byByZXNldCIpOworCitTQ1IxX1NWQV9TQ1VfQ09SRTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQorICAgICRmZWxsKGNvcmVfcnN0X25fbykgfC0+ICRmZWxsKCRwYXN0KGNvcmUyZG1fcmRjX3FsZnlfbykpCispIGVsc2UgJGVycm9yKCJTQ1UgY29yZTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKKworU0NSMV9TVkFfU0NVX0hEVTJETV9RTEZZX0NIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnB3cnVwX3JzdF9uKQorICAgICRmZWxsKGhkdV9yc3Rfbl9vKSB8LT4gJGZlbGwoJHBhc3QoaGR1MmRtX3JkY19xbGZ5X28pKQorKSBlbHNlICRlcnJvcigiU0NVIGhkdTJkbSBxbGZ5IGVycm9yOiBxbGZ5IHdhc24ndCByYWlzZWQgcHJpb3IgdG8gcmVzZXQiKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfc2N1CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Njg3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGMuc3YKQEAgLTAsMCArMSw0NTcgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV90YXBjLnN2PgorLy8vIEBicmllZiAgICAgIFRBUCBDb250cm9sbGVyIChUQVBDKQorLy8vCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8KKyAvLyBGdW5jdGlvbmFsaXR5OgorIC8vIC0gQ29udHJvbHMgVEFQIG9wZXJhdGlvbgorIC8vIC0gQWxsb3dzIGRlYnVnZ2VyIHRvIGFjY2VzcyBUQVAgRGF0YSByZWdpc3RlcnMgYW5kIERNSS9TQ1Ugc2Nhbi1jaGFpbnMgdmlhCisgLy8gICBjb21tYW5kIHdyaXR0ZW4gaW4gSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKKyAvLworIC8vIFN0cnVjdHVyZToKKyAvLyAtIFN5bmNocm9ub3VzIHJlc2V0IGdlbmVyYXRpb24KKyAvLyAtIFRBUEMgRlNNCisgLy8gLSBUQVBDIEluc3RydWN0aW9uIFJlZ2lzdGVycworIC8vIC0gVEFQQyBEUnMvRE1JL1NDVSBzY2FuLWNoYWlucworIC8vIC0gVEFQQyBURE8gZW5hYmxlIGFuZCBvdXRwdXQgUmVnaXN0ZXJzCisgLy8gLSBUQVBDIERhdGEgUmVnaXN0ZXJzCisgLy8gICAtIEJZUEFTUworIC8vICAgLSBJRENPREUKKyAvLyAgIC0gQlVJTEQgSUQKKyAvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorYGluY2x1ZGUgInNjcjFfdGFwYy5zdmgiCitgaW5jbHVkZSAic2NyMV9kbS5zdmgiCisKK21vZHVsZSBzY3IxX3RhcGMgKAorICAgIC8vIEpUQUcgc2lnbmFscworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdHJzdF9uLCAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBSZXNldCAoVFJTVG4pCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190Y2ssICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IENsb2NrIChUQ0spCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190bXMsICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IE1vZGUgU2VsZWN0IChUTVMpCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZGksICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgSW5wdXQgKFRESSkKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RkbywgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBPdXRwdXQgKFRETykKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Rkb19lbiwgICAgICAgICAgICAgICAgICAgIC8vIFRETyBFbmFibGUsIHNpZ25hbCBmb3IgVERPIGJ1ZmZlciBjb250cm9sCisKKyAgICAvLyBGdXNlczoKKyAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MydGFwY19mdXNlX2lkY29kZV9pLCAgICAgICAgIC8vIElEQ09ERSB2YWx1ZSBmcm9tIGZ1c2VzCisKKyAgICAvLyBETUkvU0NVIHNjYW4tY2hhaW5zCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28sICAgICAvLyBTQ1UgQ2hhaW4gU2VsZWN0CisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28sICAgICAvLyBETUkgQ2hhaW4gU2VsZWN0CisgICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9EQkdfRE1JX0NIX0lEX1dJRFRILTE6MF0gICAgdGFwYzJ0YXBjc3luY19jaF9pZF9vLCAgICAgICAgICAvLyBETUkvU0NVIENoYWluIElkZW50aWZpZXIKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfbywgICAgIC8vIERNSS9TQ1UgQ2hhaW4gQ2FwdHVyZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfc2hpZnRfbywgICAgICAgLy8gRE1JL1NDVSBDaGFpbiBTaGlmdAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX28sICAgICAgLy8gRE1JL1NDVSBDaGFpbiBVcGRhdGUKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3RkaV9vLCAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERJCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMydGFwY19jaF90ZG9faSAgICAgICAgICAvLyBETUkvU0NVIENoYWluIFRETworKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIFNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJzdF9uX2ludDsgICAgICAgLy8gU3luYyByZXNldCBzaWduYWwKKworLy8gVEFQQyBGU00gc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHlwZV9zY3IxX3RhcF9zdGF0ZV9lICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2ZmOyAgICAgICAvLyBUQVAncyBjdXJyZW50IHN0YXRlCit0eXBlX3NjcjFfdGFwX3N0YXRlX2UgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fbmV4dDsgICAgIC8vIFRBUCdzIG5leHQgc3RhdGUKKworLy8gQ29udHJvbCBzaWduYWxzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fcmVzZXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfdXBkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX2NhcDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9pcl9zaGZ0OworCisvLyBSZWdpc3RlcmVkIGNvbnRyb2wgc2lnbmFscworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9mZjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX25leHQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfc2hpZnRfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfc2hpZnRfbmV4dDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmY7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX25leHQ7CisKKy8vIFRBUEMgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXJzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX3NoaWZ0X2ZmOyAgIC8vIEluc3RydWN0aW9uIFNoaWZ0IFJlZ2lzdGVyCitsb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9zaGlmdF9uZXh0OyAvLyBJbnN0cnVjdGlvbiBTaGlmdCBSZWdpc3RlciBuZXh0IHZhbHVlCitsb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9mZjsgICAgICAgICAvLyBJbnN0cnVjdGlvbiBSZWdpc3RlcgorbG9naWMgW1NDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRILTE6MF0gICAgICB0YXBfaXJfbmV4dDsgICAgICAgLy8gSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgbmV4dCB2YWx1ZQorCisvLyBUQVBDIERhdGEgUmVnaXN0ZXJzIHNpZ25hbHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEJZUEFTUyByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ieXBhc3Nfc2VsOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ieXBhc3NfdGRvOworCisvLyBJRENPREUgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfaWRjb2RlX3NlbDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfaWRjb2RlX3RkbzsKKworLy8gQlVJTEQgSUQgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfYmxkX2lkX3NlbDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfYmxkX2lkX3RkbzsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9vdXQ7CisKKy8vIFRETyByZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRETyBlbmFibGUgcmVnaXN0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX2VuX2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW5fbmV4dDsKKworLy8gVERPIG91dHB1dCByZWdpc3RlcgorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fb3V0X2ZmOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fb3V0X25leHQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVBDIFN5bmNocm9ub3VzIFJlc2V0IGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIHRyc3Rfbl9pbnQgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICB0cnN0X25faW50IDw9IH50YXBfZnNtX3Jlc2V0OworICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVAncyBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCisgICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KKyAgICAgICAgdGFwX2ZzbV9mZiA8PSBTQ1IxX1RBUF9TVEFURV9SRVNFVDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICB0YXBfZnNtX2ZmIDw9IHRhcF9mc21fbmV4dDsKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNhc2UgKHRhcF9mc21fZmYpCisgICAgICAgIFNDUjFfVEFQX1NUQVRFX1JFU0VUICAgICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX1JFU0VUICAgICAgICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0lETEUgICAgICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkU7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkUgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUOworICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMSAgICAgOiBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVDsKKyAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0U7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX0VYSVQyICAgICA6IFNDUjFfVEFQX1NUQVRFX0RSX1BBVVNFOworICAgICAgICBTQ1IxX1RBUF9TVEFURV9EUl9FWElUMiAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUgICAgOiBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVDsKKyAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4gIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKKyAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfU0VMX1NDQU46IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRTsKKyAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQ7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOworICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9FWElUMSAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9QQVVTRTsKKyAgICAgICAgU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0UgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDIgICAgIDogU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0U7CisgICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQyICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOworICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9TRUxfU0NBTiAgOiBTQ1IxX1RBUF9TVEFURV9JRExFOworYGlmZGVmIFNDUjFfWFBST1BfRU4KKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21fbmV4dCA9IFNDUjFfVEFQX1NUQVRFX1hYWDsKK2BlbHNlIC8vIFNDUjFfWFBST1BfRU4KKyAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21fbmV4dCA9IHRhcF9mc21fZmY7CitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorICAgIGVuZGNhc2UKK2VuZAorCithc3NpZ24gdGFwX2ZzbV9yZXNldCAgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfUkVTRVQpOworYXNzaWduIHRhcF9mc21faXJfdXBkICA9ICh0YXBfZnNtX2ZmID09IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSk7Cithc3NpZ24gdGFwX2ZzbV9pcl9jYXAgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSk7Cithc3NpZ24gdGFwX2ZzbV9pcl9zaGZ0ID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVEFQQyBJbnN0cnVjdGlvbiBSZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRBUEMgSW5zdHJ1Y3Rpb24gU2hpZnQgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCisgICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KKyAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KKyAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRhcF9pcl9zaGlmdF9mZiA8PSB0YXBfaXJfc2hpZnRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gdGFwX2lyX3NoaWZ0X25leHQgPSB0YXBfZnNtX2lyX2NhcCAgPyB7eygkYml0cyh0YXBfaXJfc2hpZnRfZmYpLTEpezEnYjB9fSwgMSdiMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21faXJfc2hmdCA/IHt0YXBjX3RkaSwgdGFwX2lyX3NoaWZ0X2ZmWyRsZWZ0KHRhcF9pcl9zaGlmdF9mZik6MV19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXBfaXJfc2hpZnRfZmY7CisKKy8vIFRBUEMgSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCisgICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KKyAgICAgICAgdGFwX2lyX2ZmIDw9IFNDUjFfVEFQX0lOU1RSX0lEQ09ERTsKKyAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCisgICAgICAgIHRhcF9pcl9mZiA8PSBTQ1IxX1RBUF9JTlNUUl9JRENPREU7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgdGFwX2lyX2ZmIDw9IHRhcF9pcl9uZXh0OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiB0YXBfaXJfbmV4dCA9IHRhcF9mc21faXJfdXBkID8gdGFwX2lyX3NoaWZ0X2ZmIDogdGFwX2lyX2ZmOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29udHJvbCBzaWduYWxzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCisgICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X2ZmIDw9IHRhcF9mc21faXJfc2hpZnRfbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gdGFwX2ZzbV9pcl9zaGlmdF9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCk7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCisgICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KKyAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgorICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfZmYgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICB0YXBfZnNtX2RyX2NhcHR1cmVfZmYgPD0gdGFwX2ZzbV9kcl9jYXB0dXJlX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHRhcF9mc21fZHJfY2FwdHVyZV9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9EUl9DQVBUVVJFKTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KKyAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgorICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgorICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9mZiA8PSB0YXBfZnNtX2RyX3NoaWZ0X25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHRhcF9mc21fZHJfc2hpZnRfbmV4dCA9ICh0YXBfZnNtX25leHQgPT0gU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQpOworCithbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgorICAgICAgICB0YXBfZnNtX2RyX3VwZGF0ZV9mZiA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IHRhcF9mc21fZHJfdXBkYXRlX25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHRhcF9mc21fZHJfdXBkYXRlX25leHQgPSAodGFwX2ZzbV9uZXh0ID09IFNDUjFfVEFQX1NUQVRFX0RSX1VQREFURSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVBDIERScy9ETUkvU0NVIHNjYW4tY2hhaW5zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBDb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgdW5pdHM6CisgLy8gLSBEYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBkZWNvZGVyCisgLy8gLSBETUkgY2hhbm5lbCBJRCBkZWNvZGVyCisKKy8vIC0gUmVhZCBkYXRhIG11bHRpcGxleGVyCisvLyBEYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBkZWNvZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgICA9IDEnYjA7CisgICAgZHJfaWRjb2RlX3NlbCAgICAgICAgICAgICAgID0gMSdiMDsKKyAgICBkcl9ibGRfaWRfc2VsICAgICAgICAgICAgICAgPSAxJ2IwOworICAgIHRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9vICA9IDEnYjA7CisgICAgdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gID0gMSdiMDsKKyAgICBjYXNlICh0YXBfaXJfZmYpCisgICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IHRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9vID0gMSdiMTsKKyAgICAgICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUzogdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gPSAxJ2IxOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgOiBkcl9pZGNvZGVfc2VsICAgICAgICAgICAgICA9IDEnYjE7CisgICAgICAgIFNDUjFfVEFQX0lOU1RSX0JZUEFTUyAgICA6IGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgID0gMSdiMTsKKyAgICAgICAgU0NSMV9UQVBfSU5TVFJfQkxEX0lEICAgIDogZHJfYmxkX2lkX3NlbCAgICAgICAgICAgICAgPSAxJ2IxOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9TQ1VfQUNDRVNTOiB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfbyA9IDEnYjE7CisgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICA6IGRyX2J5cGFzc19zZWwgICAgICAgICAgICAgID0gMSdiMTsKKyAgICBlbmRjYXNlCitlbmQKKworLy8gRE1JIGNoYW5uZWwgSUQgZGVjb2RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnMDsKKyAgICBjYXNlICh0YXBfaXJfZmYpCisgICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICdkMTsKKyAgICAgICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUzogdGFwYzJ0YXBjc3luY19jaF9pZF9vID0gJ2QyOworICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnMDsKKyAgICBlbmRjYXNlCitlbmQKKworLy8gUmVhZCBkYXRhIG11bHRpcGxleGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfY29tYiBiZWdpbgorICAgIGRyX291dCA9IDEnYjA7CisgICAgY2FzZSAodGFwX2lyX2ZmKQorICAgICAgICBTQ1IxX1RBUF9JTlNUUl9EVE1DUyAgICAgOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9JRENPREUgICAgOiBkcl9vdXQgPSBkcl9pZGNvZGVfdGRvOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CWVBBU1MgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CTERfSUQgICAgOiBkcl9vdXQgPSBkcl9ibGRfaWRfdGRvOworICAgICAgICBTQ1IxX1RBUF9JTlNUUl9TQ1VfQUNDRVNTOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOworICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOworICAgIGVuZGNhc2UKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVERPIGVuYWJsZSBhbmQgb3V0cHV0IHJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVERPIGVuYWJsZSByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KKyAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgorICAgICAgICB0ZG9fZW5fZmYgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgorICAgICAgICB0ZG9fZW5fZmYgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgdGRvX2VuX2ZmICA8PSB0ZG9fZW5fbmV4dDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gdGRvX2VuX25leHQgPSB0YXBfZnNtX2RyX3NoaWZ0X2ZmIHwgdGFwX2ZzbV9pcl9zaGlmdF9mZjsKKworLy8gVERPIG91dHB1dCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2ZmIEAobmVnZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KKyAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgorICAgICAgICB0ZG9fb3V0X2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgorICAgICAgICB0ZG9fb3V0X2ZmIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgdGRvX291dF9mZiA8PSB0ZG9fb3V0X25leHQ7CisgICAgZW5kCitlbmQKKworYXNzaWduIHRkb19vdXRfbmV4dCA9IHRhcF9mc21fZHJfc2hpZnRfZmYgPyBkcl9vdXQKKyAgICAgICAgICAgICAgICAgICAgOiB0YXBfZnNtX2lyX3NoaWZ0X2ZmID8gdGFwX2lyX3NoaWZ0X2ZmWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEnYjA7CisKKy8vIFRBUEMgVERPIHNpZ25hbHMKK2Fzc2lnbiB0YXBjX3Rkb19lbiA9IHRkb19lbl9mZjsKK2Fzc2lnbiB0YXBjX3RkbyAgICA9IHRkb19vdXRfZmY7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVBDIERhdGEgUmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKyAvLyBSZWdpc3RlcnM6CisgLy8gLSBCWVBBU1MgcmVnaXN0ZXIKKyAvLyAtIElEQ09ERSByZWdpc3RlcgorIC8vIC0gQlVJTEQgSUQgcmVnaXN0ZXIKKworLy8gQllQQVNTIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMS1iaXQgbWFuZGF0b3J5IElFRUUgMTE0OS4xIGNvbXBsaWFudCByZWdpc3RlcgorCitzY3IxX3RhcGNfc2hpZnRfcmVnICAjKAorICAgIC5TQ1IxX1dJRFRIICAgICAgIChTQ1IxX1RBUF9EUl9CWVBBU1NfV0lEVEgpLAorICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9CWVBBU1NfV0lEVEgnKDApKQorKSBpX2J5cGFzc19yZWcgICAgICAgICgKKyAgICAuY2xrICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgKSwKKyAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgKSwKKyAgICAuZnNtX2RyX3NlbGVjdCAgICAoZHJfYnlwYXNzX3NlbCAgICAgICAgKSwKKyAgICAuZnNtX2RyX2NhcHR1cmUgICAodGFwX2ZzbV9kcl9jYXB0dXJlX2ZmKSwKKyAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgKSwKKyAgICAuZGluX3NlcmlhbCAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgKSwKKyAgICAuZGluX3BhcmFsbGVsICAgICAoMSdiMCAgICAgICAgICAgICAgICAgKSwKKyAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfYnlwYXNzX3RkbyAgICAgICAgKSwKKyAgICAuZG91dF9wYXJhbGxlbCAgICAoICAgICAgICAgICAgICAgICAgICAgKQorKTsKKworLy8gSURDT0RFIHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSG9sZHMgdGhlIERldmljZSBJRCB2YWx1ZSAobWFuZGF0b3J5IElFRUUgMTE0OS4xIGNvbXBsaWFudCByZWdpc3RlcikKKworc2NyMV90YXBjX3NoaWZ0X3JlZyAgIygKKyAgICAuU0NSMV9XSURUSCAgICAgICAoU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIKSwKKyAgICAuU0NSMV9SRVNFVF9WQUxVRSAoU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIJygwKSkKKykgaV90YXBfaWRjb2RlX3JlZyAgICAoCisgICAgLmNsayAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICApLAorICAgIC5yc3RfbiAgICAgICAgICAgICh0YXBjX3Ryc3RfbiAgICAgICAgICAgKSwKKyAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgICksCisgICAgLmZzbV9kcl9zZWxlY3QgICAgKGRyX2lkY29kZV9zZWwgICAgICAgICApLAorICAgIC5mc21fZHJfY2FwdHVyZSAgICh0YXBfZnNtX2RyX2NhcHR1cmVfZmYgKSwKKyAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgICksCisgICAgLmRpbl9zZXJpYWwgICAgICAgKHRhcGNfdGRpICAgICAgICAgICAgICApLAorICAgIC5kaW5fcGFyYWxsZWwgICAgIChzb2MydGFwY19mdXNlX2lkY29kZV9pKSwKKyAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfaWRjb2RlX3RkbyAgICAgICAgICksCisgICAgLmRvdXRfcGFyYWxsZWwgICAgKCAgICAgICAgICAgICAgICAgICAgICApCispOworCisvLyBCVUlMRCBJRCByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvbGRzIHRoZSBCVUlMRCBJRCB2YWx1ZQorCitzY3IxX3RhcGNfc2hpZnRfcmVnICAjKAorICAgIC5TQ1IxX1dJRFRIICAgICAgIChTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgpLAorICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgnKDApKQorKSBpX3RhcF9kcl9ibGRfaWRfcmVnICgKKyAgICAuY2xrICAgICAgICAgICAgICAodGFwY190Y2sgICAgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgKSwKKyAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgKSwKKyAgICAuZnNtX2RyX3NlbGVjdCAgICAoZHJfYmxkX2lkX3NlbCAgICAgICAgKSwKKyAgICAuZnNtX2RyX2NhcHR1cmUgICAodGFwX2ZzbV9kcl9jYXB0dXJlX2ZmKSwKKyAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgKSwKKyAgICAuZGluX3NlcmlhbCAgICAgICAodGFwY190ZGkgICAgICAgICAgICAgKSwKKyAgICAuZGluX3BhcmFsbGVsICAgICAoU0NSMV9UQVBfQkxEX0lEX1ZBTFVFKSwKKyAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfYmxkX2lkX3RkbyAgICAgICAgKSwKKyAgICAuZG91dF9wYXJhbGxlbCAgICAoICAgICAgICAgICAgICAgICAgICAgKQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdGRpX28gICAgID0gdGFwY190ZGk7Cithc3NpZ24gdGFwYzJ0YXBjc3luY19jaF9jYXB0dXJlX28gPSB0YXBfZnNtX2RyX2NhcHR1cmVfZmY7Cithc3NpZ24gdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9vICAgPSB0YXBfZnNtX2RyX3NoaWZ0X2ZmOworYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX28gID0gdGFwX2ZzbV9kcl91cGRhdGVfZmY7CisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBYIGNoZWNrcworU0NSMV9TVkFfVEFQQ19YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAocG9zZWRnZSB0YXBjX3RjaykgZGlzYWJsZSBpZmYgKH50YXBjX3Ryc3RfbikKKyAgICAhJGlzdW5rbm93bih7dGFwY190bXMsIHRhcGNfdGRpfSkKKykgZWxzZSAkZXJyb3IoIlRBUEMgZXJyb3I6IHVua25vd24gdmFsdWVzIik7CisKK1NDUjFfU1ZBX1RBUENfWENIRUNLX05FR0NMSyA6IGFzc2VydCBwcm9wZXJ0eSAoCisgICAgQChuZWdlZGdlIHRhcGNfdGNrKSBkaXNhYmxlIGlmZiAodGFwX2ZzbV9mZiAhPSBTQ1IxX1RBUF9TVEFURV9EUl9TSElGVCkKKyAgICAhJGlzdW5rbm93bih7dGFwY3N5bmMydGFwY19jaF90ZG9faX0pCispIGVsc2UgJGVycm9yKCJUQVBDIEBuZWdlZGdlIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOworCitgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KKworZW5kbW9kdWxlIDogc2NyMV90YXBjCisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3NoaWZ0X3JlZy5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3N2JjYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YKQEAgLTAsMCArMSwxMTIgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfdGFwY19zaGlmdF9yZWcuc3Y+CisvLy8gQGJyaWVmICAgICAgVEFQQyBzaGlmdCByZWdpc3Rlci4gUGFyYW1ldGVyaXplZCBpbXBsZW1lbnRhdGlvbiBvZiBKVEFHIFRBUEMncyBTaGlmdCBSZWdpc3Rlci4KKy8vLworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKworYGlmZGVmIFNDUjFfREJHX0VOCittb2R1bGUgc2NyMV90YXBjX3NoaWZ0X3JlZyAjKAorICAgIHBhcmFtZXRlciAgIGludCB1bnNpZ25lZCAgICAgICAgICAgIFNDUjFfV0lEVEggICAgICAgPSA4LCAgIC8vIFJlZ2lzdGVyIHdpZHRoLCBiaXRzCisgICAgcGFyYW1ldGVyICAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgU0NSMV9SRVNFVF9WQUxVRSA9ICcwICAgLy8gUmVnaXN0ZXIncyB2YWx1ZSBhZnRlciByZXNldAorKSAoCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgICAgLy8gQ2xvY2sKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAvLyBBc3luYyByZXNldAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYywgICAgIC8vIFN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUQVAgRlNNJ3MgY29udHJvbCBzaWduYWxzOgorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgZnNtX2RyX3NlbGVjdCwgIC8vICAgLSBmb3IgdGhpcyBEUiBzZWxlY3Rpb24gKG9wZXJhdGlvbiBlbmFibGluZyk7CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBmc21fZHJfY2FwdHVyZSwgLy8gICAtIHRvIGNhcHR1cmUgcGFyYWxsZWwgaW5wdXQncyBkYXRhIGludG8gc2hpZnQgcmVnaXN0ZXI7CisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBmc21fZHJfc2hpZnQsICAgLy8gICAtIHRvIGVuYWJsZSBkYXRhIHNoaWZ0aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0czoKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGRpbl9zZXJpYWwsICAgICAvLyAgIC0gc2VyaWFsIChzaGlmdF9yZWdbbXNiL1NDUjFfV0lEVEhdKTsKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgIGRpbl9wYXJhbGxlbCwgICAvLyAgIC0gcGFyYWxsZWwgKHNoaWZ0IHJlZ2lzdGVyJ3MgaW5wdXQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHM6CisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICBkb3V0X3NlcmlhbCwgICAgLy8gICAtIHNlcmlhbCAoc2hpZnRfcmVnWzBdKTsKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgIGRvdXRfcGFyYWxsZWwgICAvLyAgIC0gcGFyYWxsZWwgKHNoaWZ0IHJlZ2lzdGVyJ3Mgb3V0cHV0KS4KKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgc2hpZnRfcmVnOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNoaWZ0IHJlZ2lzdGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyYXRlCisgICAgaWYgKFNDUjFfV0lEVEggPiAxKQorICAgIGJlZ2luIDogZHJfc2hpZnRfcmVnCisKKyAgICAgICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBTQ1IxX1JFU0VUX1ZBTFVFOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGlmICh+cnN0X25fc3luYykgYmVnaW4KKyAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gU0NSMV9SRVNFVF9WQUxVRTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBpZiAoZnNtX2RyX3NlbGVjdCAmIGZzbV9kcl9jYXB0dXJlKSBiZWdpbgorICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBkaW5fcGFyYWxsZWw7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKGZzbV9kcl9zZWxlY3QgJiBmc21fZHJfc2hpZnQpIGJlZ2luCisgICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IHtkaW5fc2VyaWFsLCBzaGlmdF9yZWdbU0NSMV9XSURUSC0xOjFdfTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgIGVuZAorICAgIGVsc2UgYmVnaW4gOiBkcl9zaGlmdF9yZWcKKworICAgICAgICBhbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IFNDUjFfUkVTRVRfVkFMVUU7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKH5yc3Rfbl9zeW5jKSBiZWdpbgorICAgICAgICAgICAgICAgIHNoaWZ0X3JlZyA8PSBTQ1IxX1JFU0VUX1ZBTFVFOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGlmIChmc21fZHJfc2VsZWN0ICYgZnNtX2RyX2NhcHR1cmUpIGJlZ2luCisgICAgICAgICAgICAgICAgc2hpZnRfcmVnIDw9IGRpbl9wYXJhbGxlbDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBpZiAoZnNtX2RyX3NlbGVjdCAmIGZzbV9kcl9zaGlmdCkgYmVnaW4KKyAgICAgICAgICAgICAgICBzaGlmdF9yZWcgPD0gZGluX3NlcmlhbDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgIGVuZAorZW5kZ2VuZXJhdGUKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXJhbGxlbCBvdXRwdXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGRvdXRfcGFyYWxsZWwgPSBzaGlmdF9yZWc7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2VyaWFsIG91dHB1dAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gZG91dF9zZXJpYWwgPSBzaGlmdF9yZWdbMF07CisKK2BpZmRlZiBTQ1IxX1RSR1RfU0lNVUxBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3NlcnRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBYIGNoZWNrcworU0NSMV9TVkFfVEFQQ19TSElGVFJFR19YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oeworICAgICAgICByc3Rfbl9zeW5jLAorICAgICAgICBmc21fZHJfc2VsZWN0LAorICAgICAgICBmc21fZHJfY2FwdHVyZSwKKyAgICAgICAgZnNtX2RyX3NoaWZ0LAorICAgICAgICBkaW5fc2VyaWFsLAorICAgICAgICBkaW5fcGFyYWxsZWwKKyAgICB9KQorKSBlbHNlIGJlZ2luCisgICAgJGVycm9yKCJUQVBDIFNoaWZ0IFJlZyBlcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKK2VuZAorCitgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KKworZW5kbW9kdWxlIDogc2NyMV90YXBjX3NoaWZ0X3JlZworCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc3luY2hyb25pemVyLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTQ3MDUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvY29yZS9zY3IxX3RhcGNfc3luY2hyb25pemVyLnN2CkBAIC0wLDAgKzEsMTgzIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RhcGNfc3luY2hyb25pemVyLnN2PgorLy8vIEBicmllZiAgICAgIFRBUEMgY2xvY2sgZG9tYWluIGNyb3NzaW5nIHN5bmNocm9uaXplcgorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KK2BpbmNsdWRlICJzY3IxX3RhcGMuc3ZoIgorYGluY2x1ZGUgInNjcjFfZG0uc3ZoIgorCittb2R1bGUgc2NyMV90YXBjX3N5bmNocm9uaXplciAoCisgICAgLy8gU3lzdGVtIGNvbW1vbiBzaWduYWxzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X24sICAgICAgICAgICAgICAgIC8vIFBvd2VyLVVwIFJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcnN0X24sICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIE1vZHVsZSBSZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gQ2xvY2sgKFN5c0NMSykKKworICAgIC8vIEpUQUcgY29tbW9uIHNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Ryc3RfbiwgICAgICAgICAgICAgICAgLy8gSlRBRyBUZXN0IFJlc2V0IChUUlNUbikKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RjaywgICAgICAgICAgICAgICAgICAgLy8gSlRBRyBUZXN0IENsb2NrIChUQ0spCisKKworICAgIC8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfaSwgLy8gU0NVIENoYWluIFNlbGVjdCBpbnB1dCAgKFRDSyBkb21haW4pCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyc2N1X2NoX3NlbF9vLCAgICAgIC8vIFNDVSBDaGFpbiBTZWxlY3Qgb3V0cHV0IChTeXNDTEsgZG9tYWluKQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfZG1pX2NoX3NlbF9pLCAvLyBETUkgQ2hhaW4gU2VsZWN0IGlucHV0ICAoVENLIGRvbWFpbikKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJkbWlfY2hfc2VsX28sICAgICAgLy8gRE1JIENoYWluIFNlbGVjdCBvdXRwdXQgKFN5c0NMSyBkb21haW4pCisKKyAgICBpbnB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICB0YXBjMnRhcGNzeW5jX2NoX2lkX2ksICAgICAgLy8gRE1JL1NDVSBDaGFpbiBJZGVudGlmaWVyIGlucHV0ICAoVENLIGRvbWFpbikKKyAgICBvdXRwdXQgbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgICB0YXBjc3luYzJjb3JlX2NoX2lkX28sICAgICAgLy8gRE1JL1NDVSBDaGFpbiBJZGVudGlmaWVyIG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKKworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfY2FwdHVyZV9pLCAvLyBETUkvU0NVIENoYWluIENhcHR1cmUgaW5wdXQgIChUQ0sgZG9tYWluKQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfY2FwdHVyZV9vLCAvLyBETUkvU0NVIENoYWluIENhcHR1cmUgb3V0cHV0IChTeXNDTEsgZG9tYWluKQorCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9pLCAgIC8vIERNSS9TQ1UgQ2hhaW4gU2hpZnQgaW5wdXQgIChUQ0sgZG9tYWluKQorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbywgICAvLyBETUkvU0NVIENoYWluIFNoaWZ0IG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKKworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX2ksICAvLyBETUkvU0NVIENoYWluIFVwZGF0ZSBpbnB1dCAgKFRDSyBkb21haW4pCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF91cGRhdGVfbywgIC8vIERNSS9TQ1UgQ2hhaW4gVXBkYXRlIG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKKworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdGRpX2ksICAgICAvLyBETUkvU0NVIENoYWluIFRESSBpbnB1dCAgKFRDSyBkb21haW4pCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbywgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERJIG91dHB1dCAoU3lzQ0xLIGRvbWFpbikKKworICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGMydGFwY3N5bmNfY2hfdGRvX2ksICAgICAvLyBETUkvU0NVIENoYWluIFRETyBvdXRwdXQgKFRDSyBkb21haW4pCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZG9fbyAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERPIGlucHV0ICAoU3lzQ0xLIGRvbWFpbikKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFscyBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgICB0Y2tfZGl2cG9zOworbG9naWMgICAgICAgICAgIHRja19kaXZuZWc7Citsb2dpYyAgICAgICAgICAgdGNrX3Jpc2VfbG9hZDsKK2xvZ2ljICAgICAgICAgICB0Y2tfcmlzZV9yZXNldDsKK2xvZ2ljICAgICAgICAgICB0Y2tfZmFsbF9sb2FkOworbG9naWMgICAgICAgICAgIHRja19mYWxsX3Jlc2V0OworbG9naWMgWzM6MF0gICAgIHRja19kaXZwb3Nfc3luYzsKK2xvZ2ljIFszOjBdICAgICB0Y2tfZGl2bmVnX3N5bmM7Citsb2dpYyBbMjowXSAgICAgZG1pX2NoX2NhcHR1cmVfc3luYzsKK2xvZ2ljIFsyOjBdICAgICBkbWlfY2hfc2hpZnRfc3luYzsKK2xvZ2ljIFsyOjBdICAgICBkbWlfY2hfdGRpX3N5bmM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIHRja19kaXZwb3MgICAgICA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRja19kaXZwb3MgICAgICA8PSB+dGNrX2RpdnBvczsKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIHRja19kaXZuZWcgICAgICA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHRja19kaXZuZWcgICAgICA8PSB+dGNrX2Rpdm5lZzsKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSBwd3J1cF9yc3RfbikgYmVnaW4KKyAgICBpZiAofnB3cnVwX3JzdF9uKSBiZWdpbgorICAgICAgICB0Y2tfZGl2cG9zX3N5bmMgPD0gNCdkMDsKKyAgICAgICAgdGNrX2Rpdm5lZ19zeW5jIDw9IDQnZDA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgdGNrX2RpdnBvc19zeW5jIDw9IHt0Y2tfZGl2cG9zX3N5bmNbMjowXSwgdGNrX2RpdnBvc307CisgICAgICAgIHRja19kaXZuZWdfc3luYyA8PSB7dGNrX2Rpdm5lZ19zeW5jWzI6MF0sIHRja19kaXZuZWd9OworICAgIGVuZAorZW5kCisKK2Fzc2lnbiB0Y2tfcmlzZV9sb2FkICA9IHRja19kaXZwb3Nfc3luY1syXSBeIHRja19kaXZwb3Nfc3luY1sxXTsKK2Fzc2lnbiB0Y2tfcmlzZV9yZXNldCA9IHRja19kaXZwb3Nfc3luY1szXSBeIHRja19kaXZwb3Nfc3luY1syXTsKK2Fzc2lnbiB0Y2tfZmFsbF9sb2FkICA9IHRja19kaXZuZWdfc3luY1syXSBeIHRja19kaXZuZWdfc3luY1sxXTsKK2Fzc2lnbiB0Y2tfZmFsbF9yZXNldCA9IHRja19kaXZuZWdfc3luY1szXSBeIHRja19kaXZuZWdfc3luY1syXTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X24pIGJlZ2luCisgICAgaWYgKH5wd3J1cF9yc3RfbikgYmVnaW4KKyAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfdXBkYXRlX28gICA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAgKHRja19mYWxsX2xvYWQpIGJlZ2luCisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3VwZGF0ZV9vICAgPD0gdGFwYzJ0YXBjc3luY19jaF91cGRhdGVfaTsKKyAgICAgICAgZW5kIGVsc2UgaWYgKHRja19mYWxsX3Jlc2V0KSBiZWdpbgorICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF91cGRhdGVfbyAgIDw9ICcwOworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgorICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCisgICAgICAgIGRtaV9jaF9jYXB0dXJlX3N5bmNbMF0gPD0gJzA7CisgICAgICAgIGRtaV9jaF9zaGlmdF9zeW5jWzBdICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgZG1pX2NoX2NhcHR1cmVfc3luY1swXSA8PSB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfaTsKKyAgICAgICAgZG1pX2NoX3NoaWZ0X3N5bmNbMF0gICA8PSB0YXBjMnRhcGNzeW5jX2NoX3NoaWZ0X2k7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcHdydXBfcnN0X24pIGJlZ2luCisgICAgaWYgKH5wd3J1cF9yc3RfbikgYmVnaW4KKyAgICAgICAgZG1pX2NoX2NhcHR1cmVfc3luY1syOjFdIDw9ICcwOworICAgICAgICBkbWlfY2hfc2hpZnRfc3luY1syOjFdICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgZG1pX2NoX2NhcHR1cmVfc3luY1syOjFdIDw9IHtkbWlfY2hfY2FwdHVyZV9zeW5jWzFdLCBkbWlfY2hfY2FwdHVyZV9zeW5jWzBdfTsKKyAgICAgICAgZG1pX2NoX3NoaWZ0X3N5bmNbMjoxXSAgIDw9IHtkbWlfY2hfc2hpZnRfc3luY1sxXSwgZG1pX2NoX3NoaWZ0X3N5bmNbMF19OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgorICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCisgICAgICAgIGRtaV9jaF90ZGlfc3luYyAgICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgZG1pX2NoX3RkaV9zeW5jICAgICA8PSB7ZG1pX2NoX3RkaV9zeW5jWzE6MF0sIHRhcGMydGFwY3N5bmNfY2hfdGRpX2l9OworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgorICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbyA8PSAnMDsKKyAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfc2hpZnRfbyAgIDw9ICcwOworICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF90ZGlfbyAgICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKHRja19yaXNlX2xvYWQpIGJlZ2luCisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2NhcHR1cmVfbyA8PSBkbWlfY2hfY2FwdHVyZV9zeW5jWzJdOworICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9zaGlmdF9vICAgPD0gZG1pX2NoX3NoaWZ0X3N5bmNbMl07CisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3RkaV9vICAgICA8PSBkbWlfY2hfdGRpX3N5bmNbMl07CisgICAgICAgIGVuZCBlbHNlIGlmICh0Y2tfcmlzZV9yZXNldCkgYmVnaW4KKyAgICAgICAgICAgIHRhcGNzeW5jMmNvcmVfY2hfY2FwdHVyZV9vIDw9ICcwOworICAgICAgICAgICAgdGFwY3N5bmMyY29yZV9jaF9zaGlmdF9vICAgPD0gJzA7CisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX3RkaV9vICAgICA8PSAnMDsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgZG1fcnN0X24pIGJlZ2luCisgICAgaWYgKH5kbV9yc3RfbikgYmVnaW4KKyAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF9zZWxfbyAgICAgPD0gJzA7CisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2lkX28gICAgICA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAodGNrX3Jpc2VfbG9hZCkgYmVnaW4KKyAgICAgICAgICAgIHRhcGNzeW5jMmRtaV9jaF9zZWxfbyAgICAgPD0gdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX2k7CisgICAgICAgICAgICB0YXBjc3luYzJjb3JlX2NoX2lkX28gICAgICA8PSB0YXBjMnRhcGNzeW5jX2NoX2lkX2k7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHB3cnVwX3JzdF9uKSBiZWdpbgorICAgIGlmICh+cHdydXBfcnN0X24pIGJlZ2luCisgICAgICAgICAgICB0YXBjc3luYzJzY3VfY2hfc2VsX28gICAgIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmICh0Y2tfcmlzZV9sb2FkKSBiZWdpbgorICAgICAgICAgICAgdGFwY3N5bmMyc2N1X2NoX3NlbF9vICAgICA8PSB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfaTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdGRvX2kgPSB0YXBjc3luYzJjb3JlX2NoX3Rkb19vOworCitlbmRtb2R1bGUgOiBzY3IxX3RhcGNfc3luY2hyb25pemVyCisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfYWhiLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FoYi5zdmgKQEAgLTAsMCArMSw1OSBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2FoYi5zdmg+CisvLy8gQGJyaWVmICAgICAgQUhCIGhlYWRlciBmaWxlCisvLy8KKworYGlmbmRlZiBTQ1IxX0FIQl9TVkgKK2BkZWZpbmUgU0NSMV9BSEJfU1ZICisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitwYXJhbWV0ZXIgU0NSMV9BSEJfV0lEVEggID0gMzI7CisKKy8vIEVuY29kaW5nIGZvciBIVFJBTlMgc2lnbmFsCitwYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfSURMRSAgID0gMidiMDA7CitwYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IVFJBTlNfTk9OU0VRID0gMidiMTA7CitgaWZkZWYgU0NSMV9YUFJPUF9FTgorcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSFRSQU5TX0VSUiAgICA9ICd4OworYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgorcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSFRSQU5TX0VSUiAgICA9ICcwOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworLy8gRW5jb2RpbmcgZm9yIEhCVVJTVCBzaWduYWwKK3BhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hCVVJTVF9TSU5HTEUgPSAzJ2IwMDA7CitgaWZkZWYgU0NSMV9YUFJPUF9FTgorcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSEJVUlNUX0VSUiAgICA9ICd4OworYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgorcGFyYW1ldGVyIGxvZ2ljIFsxOjBdIFNDUjFfSEJVUlNUX0VSUiAgICA9ICcwOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworLy8gRW5jb2RpbmcgZm9yIEhTSVpFIHNpZ25hbAorcGFyYW1ldGVyIGxvZ2ljIFsyOjBdIFNDUjFfSFNJWkVfOEIgICAgPSAzJ2IwMDA7CitwYXJhbWV0ZXIgbG9naWMgWzI6MF0gU0NSMV9IU0laRV8xNkIgICA9IDMnYjAwMTsKK3BhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hTSVpFXzMyQiAgID0gMydiMDEwOworYGlmZGVmIFNDUjFfWFBST1BfRU4KK3BhcmFtZXRlciBsb2dpYyBbMjowXSBTQ1IxX0hTSVpFX0VSUiAgID0gJ3g7CitgZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCitwYXJhbWV0ZXIgbG9naWMgWzE6MF0gU0NSMV9IU0laRV9FUlIgICA9ICcwOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworLy8gRW5jb2RpbmcgSFBST1Qgc2lnbmFsCisvLyBIUFJPVFswXSA6IDAgLSBpbnN0cjsgICAgICAxIC0gZGF0YQorLy8gSFBST1RbMV0gOiAwIC0gdXNlcjsgICAgICAgMSAtIHByaXZpbGVnZQorLy8gSFBST1RbMl0gOiAwIC0gbm90IGJ1ZmZlcjsgMSAtIGJ1ZmZlcgorLy8gSFBST1RbM10gOiAwIC0gY2FjaGVhYmxlOyAgMSAtIGNhY2hlYWJsZQorcGFyYW1ldGVyIFNDUjFfSFBST1RfREFUQSAgPSAwOworcGFyYW1ldGVyIFNDUjFfSFBST1RfUFJWICAgPSAxOworcGFyYW1ldGVyIFNDUjFfSFBST1RfQlVGICAgPSAyOworcGFyYW1ldGVyIFNDUjFfSFBST1RfQ0FDSEUgPSAzOworCisvLyBFbmNvZGluZyBIUkVTUCBzaWduYWwKK3BhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX09LQVkgID0gMSdiMDsKK3BhcmFtZXRlciBsb2dpYyBTQ1IxX0hSRVNQX0VSUk9SID0gMSdiMTsKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCitwYXJhbWV0ZXIgbG9naWMgU0NSMV9IUkVTUF9FUlIgICA9IDEnYng7CitgZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCitwYXJhbWV0ZXIgbG9naWMgU0NSMV9IUkVTUF9FUlIgICA9IDEnYjA7CitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorCitgZW5kaWYgLy8gU0NSMV9BSEJfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOGI1MzIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aApAQCAtMCwwICsxLDIxNSBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoPgorLy8vIEBicmllZiAgICAgIEFyY2hpdGVjdHVyZSBkZXNjcmlwdGlvbiBmaWxlCisvLy8KKworYGlmbmRlZiBTQ1IxX0FSQ0hfREVTQ1JJUFRJT05fU1ZICitgZGVmaW5lIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ09SRSBGVU5EQU1FTlRBTCBQQVJBTUVURVJTCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBTQ1IxIGNvcmUgaWRlbnRpZmllcnMKK2BkZWZpbmUgU0NSMV9NSU1QSUQgICAgICAgICAgICAgMzInaDIxMDUxNDAwCitgZGVmaW5lIFNDUjFfTVZFTkRPUklEICAgICAgICAgIDMyJ2gwMDAwMDAwMAorCisvLyBXaWR0aCBvZiBtYWluIHJlZ2lzdGVycyBhbmQgYnVzZXMKK2BkZWZpbmUgU0NSMV9YTEVOICAgICAgICAgICAgICAgMzIKK2BkZWZpbmUgU0NSMV9JTUVNX0FXSURUSCAgICAgICAgYFNDUjFfWExFTgorYGRlZmluZSBTQ1IxX0lNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCitgZGVmaW5lIFNDUjFfRE1FTV9BV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KK2BkZWZpbmUgU0NSMV9ETUVNX0RXSURUSCAgICAgICAgYFNDUjFfWExFTgorCisvLyBUQVAgSURDT0RFCitgZGVmaW5lIFNDUjFfVEFQX0lEQ09ERSAgICAgICAgICdoREVCMTEwMDEKKworCitgaWZkZWYgU0NSMV9BUkNIX0NVU1RPTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElOQ0xVREUgU0NSMV9BUkNIX0NVU1RPTS5TVkgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRoZSBleHRlcm5hbCBmaWxlIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIHVzZWQgZm9yIHRoZSBvcGVuIFNDUjEtU0RLIHByb2plY3QsCisvLyBhbmQgY2FuIGFsc28gYmUgdXNlZCBmb3IgYW55IGN1c3RvbSBwcm9qZWN0cy4KKworLy8gVGhlIGZpbGUgc2V0czoKKy8vIC0gdGFyZ2V0IHBsYXRmb3JtIChGUEdBL0FTSUMpLCB3aGljaCBhZmZlY3RzIHRoZSBjaG9pY2Ugb2YgbG9naWNhbCBjb25zdHJ1Y3RzOworLy8gLSBkZXZpY2UgYnVpbGQgSUQ7CisvLyAtIGFkZHJlc3MgY29uc3RhbnRzOworLy8gLSBjb3VsZCBlbmFibGVzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKworLy8gUG9zc2libGUgdGFyZ2V0czoKKy8vIGBkZWZpbmUgU0NSMV9UUkdUX0ZQR0FfSU5URUwgICAgICAgICAvLyB0YXJnZXQgcGxhdGZvcm0gaXMgSW50ZWwgRlBHQXMKKy8vIGBkZWZpbmUgU0NSMV9UUkdUX0ZQR0FfSU5URUxfTUFYMTAgICAvLyB0YXJnZXQgcGxhdGZvcm0gaXMgSW50ZWwgTUFYIDEwIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQorLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBBcnJpYSBWIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQorLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9YSUxJTlggICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBYaWxpbnggRlBHQXMgKHVzZWQgaW4gdGhlIFNDUjEtU0RLIHByb2plY3QpCisvLyBgZGVmaW5lIFNDUjFfVFJHVF9BU0lDICAgICAgICAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEFTSUMKKy8vIGBkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAvLyB0YXJnZXQgaXMgc2ltdWxhdGlvbiAoZW5hYmxlIHNpbXVsYXRpb24gY29kZSkKKworIGBpbmNsdWRlICJzY3IxX2FyY2hfY3VzdG9tLnN2aCIKKworYGVuZGlmIC8vIFNDUjFfQVJDSF9DVVNUT00KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUkVDT01NRU5ERUQgQ09SRSBBUkNISVRFQ1RVUkUgQ09ORklHVVJBVElPTlMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFVuY29tbWVudCBvbmUgb2YgdGhlc2UgZGVmaW5lcyB0byBzZXQgdGhlIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb246CisKKy8vYGRlZmluZSBTQ1IxX0NGR19SVjMySU1DX01BWAorLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCisvL2BkZWZpbmUgU0NSMV9DRkdfUlYzMkVDX01JTgorCisvLyBJZiBhbGwgZGVmaW5lcyBhcmUgY29tbWVudGVkLCBjdXN0b20gY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgKHNlZSBiZWxvdykKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJFQUQtT05MWTogc2V0dGluZ3MgZm9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zCitgaWZkZWYgIFNDUjFfQ0ZHX1JWMzJJTUNfTUFYCisgIGBkZWZpbmUgU0NSMV9SVklfRVhUCisgIGBkZWZpbmUgU0NSMV9SVk1fRVhUCisgIGBkZWZpbmUgU0NSMV9SVkNfRVhUCisgIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsKKyAgYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4KKyAgYGRlZmluZSBTQ1IxX0ZBU1RfTVVMCisgIGBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTgorICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4KKyAgYGRlZmluZSBTQ1IxX0RCR19FTgorICBgZGVmaW5lIFNDUjFfVERVX0VOCisgIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSA0OworICBgZGVmaW5lIFNDUjFfVERVX0lDT1VOVF9FTgorICBgZGVmaW5lIFNDUjFfSVBJQ19FTgorICBgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOCisgIGBkZWZpbmUgU0NSMV9UQ01fRU4KK2BlbHNpZiAgU0NSMV9DRkdfUlYzMklDX0JBU0UKKyAgYGRlZmluZSBTQ1IxX1JWSV9FWFQKKyAgYGRlZmluZSBTQ1IxX1JWQ19FWFQKKyAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDE2OworICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTgorICBgZGVmaW5lIFNDUjFfTk9fREVDX1NUQUdFCisgIGBkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTgorICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4KKyAgYGRlZmluZSBTQ1IxX0RCR19FTgorICBgZGVmaW5lIFNDUjFfVERVX0VOCisgIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOworICBgZGVmaW5lIFNDUjFfVERVX0lDT1VOVF9FTgorICBgZGVmaW5lIFNDUjFfSVBJQ19FTgorICBgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOCisgIGBkZWZpbmUgU0NSMV9UQ01fRU4KK2BlbHNpZiAgU0NSMV9DRkdfUlYzMkVDX01JTgorICBgZGVmaW5lIFNDUjFfUlZFX0VYVAorICBgZGVmaW5lIFNDUjFfUlZDX0VYVAorICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMDsKKyAgYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRQorICBgZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFCisgIGBkZWZpbmUgU0NSMV9UQ01fRU4KKworYGVsc2UgLy8gYmVnaW4gY3VzdG9tIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDVVNUT00gQ09SRSBBUkNISVRFQ1RVUkUgQ09ORklHVVJBVElPTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVG8gZmluZS10dW5lIGN1c3RvbSBjb25maWd1cmF0aW9uLCB5b3UgY2FuIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoaXMgc2VjdGlvbi4KKy8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZpbmVzIG9mIHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucyBhcmUgY29tbWVudGVkLAorLy8gb3RoZXJ3aXNlIHRoaXMgc2VjdGlvbiB3aWxsIGJlIGluYWN0aXZlLgorCisvLyBSSVNDLVYgSVNBIG9wdGlvbnMKKy8vYGRlZmluZSBTQ1IxX1JWRV9FWFQgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQsIG90aGVyd2lzZSBSVjMySSB3aWxsIGJlIHVzZWQKK2BkZWZpbmUgU0NSMV9SVk1fRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIk0iIGZvciBpbnRlZ2VyIGhhcmR3YXJlIG11bHRpcGxpZXIgYW5kIGRpdmlkZXIKK2BkZWZpbmUgU0NSMV9SVkNfRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIkMiIGZvciBjb21wcmVzc2VkIGluc3RydWN0aW9ucworcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDI2OyAgICAvLyBudW1iZXIgb2Ygd3JpdGFibGUgaGlnaC1vcmRlciBiaXRzIGluIE1UVkVDLmJhc2UgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZ2FsIHZhbHVlcyBhcmUgMCB0byAyNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZC1vbmx5IGJpdHMgYXJlIGhhcmR3aXJlZCB0byByZXNldCB2YWx1ZQorYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4gICAgICAgICAgLy8gZW5hYmxlIHdyaXRhYmxlIE1UVkVDLm1vZGUgZmllbGQgdG8gYWxsb3cgdmVjdG9yZWQgaXJxIG1vZGUsIG90aGVyd2lzZSBvbmx5IGRpcmVjdCBtb2RlIGlzIHBvc3NpYmxlCisKK2BpZm5kZWYgU0NSMV9SVkVfRVhUCisgIGBkZWZpbmUgU0NSMV9SVklfRVhUIC8vIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQgaWYgU0NSMV9SVkVfRVhUIGlzIG5vdCBlbmFibGVkCitgZW5kaWYgLy8gflNDUjFfUlZFX0VYVAorCisvLyBDb3JlIHBpcGVsaW5lIG9wdGlvbnMgKHBvd2VyLXBlcmZvcm1hbmNlLWFyZWEgb3B0aW1pemF0aW9uKQorYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRSAgICAgICAgICAgLy8gZGlzYWJsZSByZWdpc3RlciBiZXR3ZWVuIElGVSBhbmQgSURVCitgZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFICAgICAgICAgICAvLyBkaXNhYmxlIHJlZ2lzdGVyIGJldHdlZW4gSURVIGFuZCBFWFUKK2BkZWZpbmUgU0NSMV9ORVdfUENfUkVHICAgICAgICAgICAgIC8vIGVuYWJsZSByZWdpc3RlciBpbiBJRlUgZm9yIE5ld19QQyB2YWx1ZQorYGRlZmluZSBTQ1IxX0ZBU1RfTVVMICAgICAgICAgICAgICAgLy8gZW5hYmxlIGZhc3Qgb25lLWN5Y2xlIG11bHRpcGxpY2F0aW9uLCBvdGhlcndpc2UgbXVsdGlwbGljYXRpb24gdGFrZXMgMzIgY3ljbGVzCitgZGVmaW5lIFNDUjFfQ0xLQ1RSTF9FTiAgICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGNsb2NrIGdhdGluZworYGRlZmluZSBTQ1IxX01QUkZfUlNUX0VOICAgICAgICAgICAgLy8gZW5hYmxlIHJlc2V0IGZvciBNUFJGCitgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4gICAgICAgICAgICAvLyBlbmFibGUgY3VzdG9tIE1DT1VOVEVOIENTUiBmb3IgY291bnRlciBjb250cm9sCisKKy8vIFVuY29yZSBvcHRpb25zCitgZGVmaW5lIFNDUjFfREJHX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgRGVidWcgU3Vic3lzdGVtIChUQVBDLCBETSwgU0NVLCBIRFUpCitgZGVmaW5lIFNDUjFfVERVX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVHJpZ2dlciBEZWJ1ZyBVbml0IChoYXJkd2FyZSBicmVha3BvaW50cykKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOyAgIC8vIG51bWJlciBvZiBoYXJkd2FyZSB0cmlnZ2VycworYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4gICAgICAgICAgLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJzIG9uIGluc3RydWN0aW9uIGNvdW50ZXIKK2BkZWZpbmUgU0NSMV9JUElDX0VOICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBJbnRlZ3JhdGVkIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcgorYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTiAgICAgICAgICAgLy8gZW5hYmxlIElQSUMgc3luY2hyb25pemVyCitgZGVmaW5lIFNDUjFfVENNX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVGlnaHRseS1Db3VwbGVkIE1lbW9yeQorCitgZW5kaWYgLy8gZW5kIGN1c3RvbSBjb25maWd1cmF0aW9uIHNlY3Rpb24KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ09SRSBJTlRFR1JBVElPTiBPUFRJT05TCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBCeXBhc3NlcyBvbiBBWEkvQUhCIGJyaWRnZSBJL08KK2BkZWZpbmUgU0NSMV9JTUVNX0FIQl9JTl9CUCAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZSBpbnB1dCByZWdpc3RlcgorYGRlZmluZSBTQ1IxX0lNRU1fQUhCX09VVF9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgorYGRlZmluZSBTQ1IxX0RNRU1fQUhCX0lOX0JQICAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFIQiBicmlkZ2UgaW5wdXQgcmVnaXN0ZXIKK2BkZWZpbmUgU0NSMV9ETUVNX0FIQl9PVVRfQlAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgorYGRlZmluZSBTQ1IxX0lNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlIHJlcXVlc3QgcmVnaXN0ZXIKK2BkZWZpbmUgU0NSMV9JTUVNX0FYSV9SRVNQX0JQICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQVhJIGJyaWRnZSByZXNwb25zZSByZWdpc3RlcgorYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVxdWVzdCByZWdpc3RlcgorYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVzcG9uc2UgcmVnaXN0ZXIKKworYGlmbmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCisvLyBEZWZhdWx0IGFkZHJlc3MgY29uc3RhbnRzIChpZiBzY3IxX2FyY2hfY3VzdG9tLnN2aCBpcyBub3QgdXNlZCkKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICBTQ1IxX0FSQ0hfUlNUX1ZFQ1RPUiAgICAgICAgPSAnaDIwMDsgICAgICAgICAgICAvLyBSZXNldCB2ZWN0b3IgdmFsdWUgKHN0YXJ0IGFkZHJlc3MgYWZ0ZXIgcmVzZXQpCitwYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgU0NSMV9BUkNIX01UVkVDX0JBU0UgICAgICAgID0gJ2gxQzA7ICAgICAgICAgICAgLy8gTVRWRUMuYmFzZSBmaWVsZCByZXNldCB2YWx1ZSwgb3IgY29uc3RhbnQgdmFsdWUgZm9yIE1UVkVDLmJhc2UgYml0cyB0aGF0IGFyZSBoYXJkd2lyZWQKKworcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVENNX0FERFJfTUFTSyAgICAgICAgICA9ICdoRkZGRjAwMDA7ICAgICAgIC8vIFRDTSBtYXNrIGFuZCBzaXplOyBzaXplIGluIGJ5dGVzIGlzIHR3bydzIGNvbXBsZW1lbnQgb2YgdGhlIG1hc2sgdmFsdWUKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RDTV9BRERSX1BBVFRFUk4gICAgICAgPSAnaDAwNDgwMDAwOyAgICAgICAvLyBUQ00gYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCisKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RJTUVSX0FERFJfTUFTSyAgICAgICAgPSAnaEZGRkZGRkUwOyAgICAgICAvLyBUaW1lciBtYXNrCitwYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9USU1FUl9BRERSX1BBVFRFUk4gICAgID0gJ2gwMDQ5MDAwMDsgICAgICAgLy8gVGltZXIgYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCisKKy8vIERldmljZSBidWlsZCBJRAorIGBkZWZpbmUgU0NSMV9BUkNIX0JVSUxEX0lEICAgICAgICAgICAgIGBTQ1IxX01JTVBJRAorCitgZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQVJHRVQtU1BFQ0lGSUMgT1BUSU9OUworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUkFNLWJhc2VkIE1QUkYgY2FuIGJlIHVzZWQgZm9yIEludGVsIEZQR0FzIG9ubHkKK2BpZmRlZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTAorICBgZGVmaW5lIFNDUjFfTVBSRl9SQU0gICAgICAgICAgIC8vIGltcGxlbWVudHMgTVBSRiB3aXRoIGRlZGljYXRlZCBSQU0gYmxvY2tzCitgZW5kaWYKKworLy8gRVhVX1NUQUdFX0JZUEFTUyBhbmQgTVBSRl9SU1RfRU4gbXVzdCBiZSBkaXNhYmxlZCBmb3IgUkFNLWJhc2VkIE1QUkYKK2BpZmRlZiBTQ1IxX01QUkZfUkFNCisgIGB1bmRlZiAgU0NSMV9OT19FWEVfU1RBR0UKKyAgYHVuZGVmICBTQ1IxX01QUkZfUlNUX0VOCitgZW5kaWYKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0lNVUxBVElPTiBPUFRJT05TCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvL2BkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAgICAvLyBlbmFibGUgc2ltdWxhdGlvbiBjb2RlIChhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgcm9vdCBtYWtlZmlsZSkKKy8vYGRlZmluZSBTQ1IxX1RSQUNFX0xPR19FTiAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0cmFjZWxvZworLy9gZGVmaW5lIFNDUjFfWFBST1BfRU4gICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFgtcHJvcGFnYXRpb24KKworLy8gQWRkcmVzc2VzIHVzZWQgaW4gdGVzdGJlbmNoCitsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWElUX0FERFIgICAgICA9IDMyJ2gwMDAwXzAwRjg7Citsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7Citsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWFRfSVJRX0FERFIgICA9IDMyJ2hGMDAwXzAxMDA7Citsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9TT0ZUX0lSUV9BRERSICA9IDMyJ2hGMDAwXzAyMDA7CisKK2BlbmRpZiAvLyBTQ1IxX0FSQ0hfREVTQ1JJUFRJT05fU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX3R5cGVzLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2FyY2hfdHlwZXMuc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZjEwMzcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9hcmNoX3R5cGVzLnN2aApAQCAtMCwwICsxLDcyIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfYXJjaF90eXBlcy5zdmg+CisvLy8gQGJyaWVmICAgICAgUGlwZWxpbmUgdHlwZXMgZGVzY3JpcHRpb24gZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9BUkNIX1RZUEVTX1NWSAorYGRlZmluZSBTQ1IxX0FSQ0hfVFlQRVNfU1ZICisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1QUkYgYW5kIENTUiBwYXJhbWV0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGlmZGVmIFNDUjFfUlZFX0VYVAorICBgZGVmaW5lIFNDUjFfTVBSRl9BV0lEVEggICAgNAorICBgZGVmaW5lIFNDUjFfTVBSRl9TSVpFICAgICAgMTYKK2BlbHNlIC8vIFNDUjFfUlZFX0VYVAorICBgZGVmaW5lIFNDUjFfTVBSRl9BV0lEVEggICAgNQorICBgZGVmaW5lIFNDUjFfTVBSRl9TSVpFICAgICAgMzIKK2BlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKKwordHlwZWRlZiBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICB0eXBlX3NjcjFfbXByZl92OwordHlwZWRlZiBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICB0eXBlX3NjcjFfcGNfdjsKKworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9DU1JfQUREUl9XSURUSCAgICAgICAgICAgICA9IDEyOworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9DU1JfTVRWRUNfQkFTRV9aRVJPX0JJVFMgICA9IDY7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX0NTUl9NVFZFQ19CQVNFX1ZBTF9CSVRTICAgID0gYFNDUjFfWExFTi1TQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUzsKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTpTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUU10gIFNDUjFfQ1NSX01UVkVDX0JBU0VfV1JfUlNUX1ZBTCAgICA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfQ1NSX01UVkVDX0JBU0VfVkFMX0JJVFMnKFNDUjFfQVJDSF9NVFZFQ19CQVNFID4+IFNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTKTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfQ1NSX01UVkVDX0JBU0VfUk9fQklUUyA9IChgU0NSMV9YTEVOLShTQ1IxX0NTUl9NVFZFQ19CQVNFX1pFUk9fQklUUytTQ1IxX01UVkVDX0JBU0VfV1JfQklUUykpOworCitgZGVmaW5lIFNDUjFfTVRWQUxfSUxMRUdBTF9JTlNUUl9FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEV4Y2VwdGlvbiBhbmQgSVJRIGNvZGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9FWENfQ09ERV9XSURUSF9FICAgID0gNDsKKworLy8gRXhjZXB0aW9ucwordHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSB7CisgICAgU0NSMV9FWENfQ09ERV9JTlNUUl9NSVNBTElHTiAgICAgICAgPSA0J2QwLCAgICAgLy8gZnJvbSBFWFUKKyAgICBTQ1IxX0VYQ19DT0RFX0lOU1RSX0FDQ0VTU19GQVVMVCAgICA9IDQnZDEsICAgICAvLyBmcm9tIElGVQorICAgIFNDUjFfRVhDX0NPREVfSUxMRUdBTF9JTlNUUiAgICAgICAgID0gNCdkMiwgICAgIC8vIGZyb20gSURVIG9yIENTUgorICAgIFNDUjFfRVhDX0NPREVfQlJFQUtQT0lOVCAgICAgICAgICAgID0gNCdkMywgICAgIC8vIGZyb20gSURVIG9yIEJSS00KKyAgICBTQ1IxX0VYQ19DT0RFX0xEX0FERFJfTUlTQUxJR04gICAgICA9IDQnZDQsICAgICAvLyBmcm9tIExTVQorICAgIFNDUjFfRVhDX0NPREVfTERfQUNDRVNTX0ZBVUxUICAgICAgID0gNCdkNSwgICAgIC8vIGZyb20gTFNVCisgICAgU0NSMV9FWENfQ09ERV9TVF9BRERSX01JU0FMSUdOICAgICAgPSA0J2Q2LCAgICAgLy8gZnJvbSBMU1UKKyAgICBTQ1IxX0VYQ19DT0RFX1NUX0FDQ0VTU19GQVVMVCAgICAgICA9IDQnZDcsICAgICAvLyBmcm9tIExTVQorICAgIFNDUjFfRVhDX0NPREVfRUNBTExfTSAgICAgICAgICAgICAgID0gNCdkMTEgICAgIC8vIGZyb20gSURVCit9IHR5cGVfc2NyMV9leGNfY29kZV9lOworCisvLyBJUlFzLCByZXNldAorcGFyYW1ldGVyIGJpdCBbU0NSMV9FWENfQ09ERV9XSURUSF9FLTE6MF0gU0NSMV9FWENfQ09ERV9JUlFfTV9TT0ZUV0FSRSAgICAgID0gNCdkMzsKK3BhcmFtZXRlciBiaXQgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdIFNDUjFfRVhDX0NPREVfSVJRX01fVElNRVIgICAgICAgICA9IDQnZDc7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0VYQ19DT0RFX1dJRFRIX0UtMTowXSBTQ1IxX0VYQ19DT0RFX0lSUV9NX0VYVEVSTkFMICAgICAgPSA0J2QxMTsKK3BhcmFtZXRlciBiaXQgW1NDUjFfRVhDX0NPREVfV0lEVEhfRS0xOjBdIFNDUjFfRVhDX0NPREVfUkVTRVQgICAgICAgICAgICAgICA9IDQnZDA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gT3BlcmFuZCB3aWR0aCBmb3IgQlJLTQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWMgWzE6MF0geworICAgIFNDUjFfT1BfV0lEVEhfQllURSAgPSAyJ2IwMCwKKyAgICBTQ1IxX09QX1dJRFRIX0hBTEYgID0gMidiMDEsCisgICAgU0NSMV9PUF9XSURUSF9XT1JEICA9IDInYjEwCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX09QX1dJRFRIX0VSUk9SID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9vcF93aWR0aF9lOworCitgZW5kaWYgLy9TQ1IxX0FSQ0hfVFlQRVNfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9jc3Iuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGRjYWZiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfY3NyLnN2aApAQCAtMCwwICsxLDE5NiBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2Nzci5zdmg+CisvLy8gQGJyaWVmICAgICAgQ1NSIG1hcHBpbmcvZGVzY3JpcHRpb24gZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9DU1JfU1ZICitgZGVmaW5lIFNDUjFfQ1NSX1NWSAorCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX2FyY2hfdHlwZXMuc3ZoIgorYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCisKK2BpZmRlZiBTQ1IxX1JWRV9FWFQKK2BkZWZpbmUgU0NSMV9DU1JfUkVEVUNFRF9DTlQKK2BlbmRpZiAvLyBTQ1IxX1JWRV9FWFQKKworYGlmZGVmIFNDUjFfQ1NSX1JFRFVDRURfQ05UCitgdW5kZWYgU0NSMV9NQ09VTlRFTl9FTgorYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ1NSIGFkZHJlc3NlcyAoc3RhbmRhcmQpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gTWFjaGluZSBJbmZvcm1hdGlvbiBSZWdpc3RlcnMgKHJlYWQtb25seSkKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01WRU5ET1JJRCAgICAgPSAnaEYxMTsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01BUkNISUQgICAgICAgPSAnaEYxMjsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01JTVBJRCAgICAgICAgPSAnaEYxMzsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX01IQVJUSUQgICAgICAgPSAnaEYxNDsKKworLy8gTWFjaGluZSBUcmFwIFNldHVwIChyZWFkLXdyaXRlKQorcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTVNUQVRVUyAgICAgICA9ICdoMzAwOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlTQSAgICAgICAgICA9ICdoMzAxOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlFICAgICAgICAgICA9ICdoMzA0OworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTVRWRUMgICAgICAgICA9ICdoMzA1OworCisvLyBNYWNoaW5lIFRyYXAgSGFuZGxpbmcgKHJlYWQtd3JpdGUpCitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NU0NSQVRDSCAgICAgID0gJ2gzNDA7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NRVBDICAgICAgICAgID0gJ2gzNDE7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ0FVU0UgICAgICAgID0gJ2gzNDI7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NVFZBTCAgICAgICAgID0gJ2gzNDM7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NSVAgICAgICAgICAgID0gJ2gzNDQ7CisKKy8vIE1hY2hpbmUgQ291bnRlcnMvVGltZXJzIChyZWFkLXdyaXRlKQorYGlmbmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUNZQ0xFICAgICAgICA9ICdoQjAwOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlOU1RSRVQgICAgICA9ICdoQjAyOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUNZQ0xFSCAgICAgICA9ICdoQjgwOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfTUlOU1RSRVRIICAgICA9ICdoQjgyOworYGVuZGlmIC8vIFNDUjFfQ1NSX1JFRFVDRURfQ05UCisKKy8vIFNoYWRvdyBDb3VudGVycy9UaW1lcnMgKHJlYWQtb25seSkKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1RJTUUgICAgICAgICAgPSAnaEMwMTsKK2BpZm5kZWYgU0NSMV9DU1JfUkVEVUNFRF9DTlQKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0NZQ0xFICAgICAgICAgPSAnaEMwMDsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lOU1RSRVQgICAgICAgPSAnaEMwMjsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1RJTUVIICAgICAgICAgPSAnaEM4MTsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0NZQ0xFSCAgICAgICAgPSAnaEM4MDsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lOU1RSRVRIICAgICAgPSAnaEM4MjsKK2BlbmRpZiAvLyBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorCitgaWZkZWYgU0NSMV9EQkdfRU4KKy8vcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfREJHQ19TQ1JBVENIICA9ICdoN0M4OworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICAgID0gJ2g3QjA7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9IRFVfTVNQQU4gICAgPSAnaDAwNDsgICAgLy8gbXVzdCBiZSBwb3dlciBvZiAyCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1IgYWRkcmVzc2VzIChub24tc3RhbmRhcmQpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9NQ09VTlRFTiAgICAgID0gJ2g3RTA7CitgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgorCitgaWZkZWYgU0NSMV9URFVfRU4KK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9NQkFTRSAgICA9ICdoN0EwOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfVERVX01TUEFOICAgID0gJ2gwMDg7ICAgIC8vIG11c3QgYmUgcG93ZXIgb2YgMgorYGVuZGlmIC8vIFNDUjFfVERVX0VOCisKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSAgICAgPSAnaEJGMDsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfQ0lTViAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfQ0lTViApOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19DSUNTUiAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19DSUNTUik7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX0lQUiAgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX0lQUiAgKTsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfSVNWUiAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfSVNWUiApOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19FT0kgICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19FT0kgICk7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9JUElDX1NPSSAgICAgID0gKFNDUjFfQ1NSX0FERFJfSVBJQ19CQVNFICsgU0NSMV9JUElDX1NPSSAgKTsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX0lQSUNfSURYICAgICAgPSAoU0NSMV9DU1JfQUREUl9JUElDX0JBU0UgKyBTQ1IxX0lQSUNfSURYICApOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfQ1NSX0FERFJfSVBJQ19JQ1NSICAgICA9IChTQ1IxX0NTUl9BRERSX0lQSUNfQkFTRSArIFNDUjFfSVBJQ19JQ1NSICk7CitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1IgZGVmaW5pdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBHZW5lcmFsCitwYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gU0NSMV9SU1RfVkVDVE9SICAgICAgPSBTQ1IxX0FSQ0hfUlNUX1ZFQ1RPUjsKKworLy8gUmVzZXQgdmFsdWVzIFRCRAorcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSUVfTVNJRV9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKK3BhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlFX01USUVfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7CitwYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JRV9NRUlFX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOworCitwYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01JUF9NU0lQX1JTVF9WQUwgICAgICAgICAgICAgPSAxJ2IwOworcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NSVBfTVRJUF9SU1RfVkFMICAgICAgICAgICAgID0gMSdiMDsKK3BhcmFtZXRlciBiaXQgU0NSMV9DU1JfTUlQX01FSVBfUlNUX1ZBTCAgICAgICAgICAgICA9IDEnYjA7CisKK3BhcmFtZXRlciBiaXQgU0NSMV9DU1JfTVNUQVRVU19NSUVfUlNUX1ZBTCAgICAgICAgICA9IDEnYjA7CitwYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01TVEFUVVNfTVBJRV9SU1RfVkFMICAgICAgICAgPSAxJ2IxOworCisvLyBNSVNBCitgZGVmaW5lIFNDUjFfUlZDX0VOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNDUjFfWExFTidoMDAwNAorYGRlZmluZSBTQ1IxX1JWRV9FTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTQ1IxX1hMRU4naDAwMTAKK2BkZWZpbmUgU0NSMV9SVklfRU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU0NSMV9YTEVOJ2gwMTAwCitgZGVmaW5lIFNDUjFfUlZNX0VOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNDUjFfWExFTidoMTAwMAorcGFyYW1ldGVyIGJpdCBbMTowXSAgICAgICAgICAgICBTQ1IxX01JU0FfTVhMXzMyICAgID0gMidkMTsKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSAgU0NSMV9DU1JfTUlTQSAgICAgICA9IChTQ1IxX01JU0FfTVhMXzMyIDw8IChgU0NSMV9YTEVOLTIpKQorYGlmbmRlZiBTQ1IxX1JWRV9FWFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBTQ1IxX1JWSV9FTkMKK2BlbHNlIC8vIFNDUjFfUlZFX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZFX0VOQworYGVuZGlmIC8vIFNDUjFfUlZFX0VYVAorYGlmZGVmIFNDUjFfUlZDX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZDX0VOQworYGVuZGlmIC8vIFNDUjFfUlZDX0VYVAorYGlmZGVmIFNDUjFfUlZNX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYFNDUjFfUlZNX0VOQworYGVuZGlmIC8vIFNDUjFfUlZNX0VYVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gTVZFTkRPUklECitwYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gU0NSMV9DU1JfTVZFTkRPUklEICAgPSBgU0NSMV9NVkVORE9SSUQ7CisKKy8vIE1BUkNISUQKK3BhcmFtZXRlciBiaXQgW2BTQ1IxX1hMRU4tMTowXSBTQ1IxX0NTUl9NQVJDSElEICAgICA9IGBTQ1IxX1hMRU4nZDg7CisKKy8vIE1JTVBJRAorcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdIFNDUjFfQ1NSX01JTVBJRCAgICAgID0gYFNDUjFfTUlNUElEOworCisvLyBNU1RBVFVTCitwYXJhbWV0ZXIgYml0IFsxOjBdIFNDUjFfQ1NSX01TVEFUVVNfTVBQICAgICAgICAgICAgPSAyJ2IxMTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTVNUQVRVU19NSUVfT0ZGU0VUICA9IDM7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01TVEFUVVNfTVBJRV9PRkZTRVQgPSA3OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NU1RBVFVTX01QUF9PRkZTRVQgID0gMTE7CisKKy8vIE1UVkVDCisvLyBiaXRzIFs1OjBdIGFyZSBhbHdheXMgemVybworcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOlNDUjFfQ1NSX01UVkVDX0JBU0VfWkVST19CSVRTXSBTQ1IxX0NTUl9NVFZFQ19CQVNFX1JTVF9WQUwgID0gU0NSMV9DU1JfTVRWRUNfQkFTRV9XUl9SU1RfVkFMOworCitwYXJhbWV0ZXIgYml0IFNDUjFfQ1NSX01UVkVDX01PREVfRElSRUNUICAgICAgICAgICAgPSAxJ2IwOworYGlmZGVmIFNDUjFfTVRWRUNfTU9ERV9FTgorcGFyYW1ldGVyIGJpdCBTQ1IxX0NTUl9NVFZFQ19NT0RFX1ZFQ1RPUkVEICAgICAgICAgID0gMSdiMTsKK2BlbmRpZiAvLyBTQ1IxX01UVkVDX01PREVfRU4KKworLy8gTUlFLCBNSVAKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTUlFX01TSUVfT0ZGU0VUICAgICA9IDM7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfQ1NSX01JRV9NVElFX09GRlNFVCAgICAgPSA3OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NSUVfTUVJRV9PRkZTRVQgICAgID0gMTE7CisKK2BpZmRlZiBTQ1IxX01DT1VOVEVOX0VOCisvLyBNQ09VTlRFTgorcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9NQ09VTlRFTl9DWV9PRkZTRVQgID0gMDsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfTUNPVU5URU5fSVJfT0ZGU0VUICA9IDI7CitgZW5kaWYgLy8gU0NSMV9NQ09VTlRFTl9FTgorCisvLyBNQ0FVU0UKK3R5cGVkZWYgbG9naWMgW2BTQ1IxX1hMRU4tMjowXSAgICAgIHR5cGVfc2NyMV9jc3JfbWNhdXNlX2VjX3Y7CisKKy8vIE1DWUNMRSwgTUlOU1RSRVQKK2BpZmRlZiBTQ1IxX0NTUl9SRURVQ0VEX0NOVAorcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX0NTUl9DT1VOVEVSU19XSURUSCAgICAgID0gMzI7CitgZWxzZSAvLyB+U0NSMV9DU1JfUkVEVUNFRF9DTlQKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9DU1JfQ09VTlRFUlNfV0lEVEggICAgICA9IDY0OworYGVuZGlmIC8vIH5TQ1IxX0NTUl9SRURVQ0VEX0NOVAorCisvLyBIUE0KK3BhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9IUE1DT1VOVEVSX01BU0sgICA9IDcnYjExMDAwMDA7CitwYXJhbWV0ZXIgYml0IFs2OjBdIFNDUjFfQ1NSX0FERFJfSFBNQ09VTlRFUkhfTUFTSyAgPSA3J2IxMTAwMTAwOworcGFyYW1ldGVyIGJpdCBbNjowXSBTQ1IxX0NTUl9BRERSX01IUE1DT1VOVEVSX01BU0sgID0gNydiMTAxMTAwMDsKK3BhcmFtZXRlciBiaXQgWzY6MF0gU0NSMV9DU1JfQUREUl9NSFBNQ09VTlRFUkhfTUFTSyA9IDcnYjEwMTExMDA7CitwYXJhbWV0ZXIgYml0IFs2OjBdIFNDUjFfQ1NSX0FERFJfTUhQTUVWRU5UX01BU0sgICAgPSA3J2IwMDExMDAxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9DU1JfUkVTUF9PSywKKyAgICBTQ1IxX0NTUl9SRVNQX0VSCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX0NTUl9SRVNQX0VSUk9SID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9jc3JfcmVzcF9lOworCitgZW5kaWYgLy8gU0NSMV9DU1JfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9kbS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9kbS5zdmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0YjBkOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX2RtLnN2aApAQCAtMCwwICsxLDE0MSBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9kbS5zdmg+CisvLy8gQGJyaWVmICAgICAgRGVidWcgTW9kdWxlIGhlYWRlciBmaWxlCisvLy8KKworYGlmbmRlZiBTQ1IxX0lOQ0xVREVfRE1fREVGUworYGRlZmluZSBTQ1IxX0lOQ0xVREVfRE1fREVGUworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX2hkdS5zdmgiCitgaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgorCitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0FERFJfV0lEVEggICAgICAgICAgICAgICAgICA9IDYnZDc7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0RBVEFfV0lEVEggICAgICAgICAgICAgICAgICA9IDYnZDMyOworcGFyYW1ldGVyIFNDUjFfREJHX0RNSV9PUF9XSURUSCAgICAgICAgICAgICAgICAgICAgPSAyJ2QyOworCitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0NIX0lEX1dJRFRIICAgICAgICAgICAgICAgICA9IDInZDI7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1JX0RSX0RUTUNTX1dJRFRIICAgICAgICAgICAgICA9IDYnZDMyOworcGFyYW1ldGVyIFNDUjFfREJHX0RNSV9EUl9ETUlfQUNDRVNTX1dJRFRIICAgICAgICAgPSBTQ1IxX0RCR19ETUlfT1BfV0lEVEggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0RCR19ETUlfREFUQV9XSURUSCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfREJHX0RNSV9BRERSX1dJRFRIOworCisvLyBEZWJ1ZyBNb2R1bGUgYWRkcmVzc2VzCitwYXJhbWV0ZXIgU0NSMV9EQkdfREFUQTAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDQ7CitwYXJhbWV0ZXIgU0NSMV9EQkdfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDU7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDEwOworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gxMTsKK3BhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GTyAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMTI7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDUyAgICAgICAgICAgICAgICAgICAgICA9IDcnaDE2OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gxNzsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVEFVVE8gICAgICAgICAgICAgICAgICAgID0gNydoMTg7CitwYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDIwOworcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUYxICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyMTsKK3BhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGMiAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjI7CitwYXJhbWV0ZXIgU0NSMV9EQkdfUFJPR0JVRjMgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDIzOworcGFyYW1ldGVyIFNDUjFfREJHX1BST0dCVUY0ICAgICAgICAgICAgICAgICAgICAgICAgPSA3J2gyNDsKK3BhcmFtZXRlciBTQ1IxX0RCR19QUk9HQlVGNSAgICAgICAgICAgICAgICAgICAgICAgID0gNydoMjU7CitwYXJhbWV0ZXIgU0NSMV9EQkdfSEFMVFNVTTAgICAgICAgICAgICAgICAgICAgICAgICA9IDcnaDQwOworCisvLyBETUNPTlRST0wKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFMVFJFUSAgICAgICAgICAgICAgID0gNSdkMzE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX1JFU1VNRVJFUSAgICAgICAgICAgICA9IDUnZDMwOworcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUUkVTRVQgICAgICAgICAgICAgPSA1J2QyOTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfQUNLSEFWRVJFU0VUICAgICAgICAgID0gNSdkMjg7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX1JFU0VSVkVEQiAgICAgICAgICAgICA9IDUnZDI3OworcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVNFTCAgICAgICAgICAgICAgICAgPSA1J2QyNjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTExPX0hJICAgICAgICAgID0gNSdkMjU7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1DT05UUk9MX0hBUlRTRUxMT19MTyAgICAgICAgICA9IDUnZDE2OworcGFyYW1ldGVyIFNDUjFfREJHX0RNQ09OVFJPTF9IQVJUU0VMSElfSEkgICAgICAgICAgPSA1J2QxNTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfSEFSVFNFTEhJX0xPICAgICAgICAgID0gNSdkNjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0hJICAgICAgICAgID0gNSdkNTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfUkVTRVJWRURBX0xPICAgICAgICAgID0gNSdkMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfTkRNUkVTRVQgICAgICAgICAgICAgID0gNSdkMTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETUNPTlRST0xfRE1BQ1RJVkUgICAgICAgICAgICAgID0gNSdkMDsKKworLy8gRE1TVEFUVVMKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFRENfSEkgICAgICAgICAgID0gNSdkMzE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURDX0xPICAgICAgICAgICA9IDUnZDIzOworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0lNUEVCUkVBSyAgICAgICAgICAgICAgPSA1J2QyMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREJfSEkgICAgICAgICAgID0gNSdkMjE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfUkVTRVJWRURCX0xPICAgICAgICAgICA9IDUnZDIwOworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTEhBVkVSRVNFVCAgICAgICAgICAgPSA1J2QxOTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllIQVZFUkVTRVQgICAgICAgICAgID0gNSdkMTg7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMUkVTVU1FQUNLICAgICAgICAgICA9IDUnZDE3OworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWVJFU1VNRUFDSyAgICAgICAgICAgPSA1J2QxNjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExOT05FWElTVEVOVCAgICAgICAgID0gNSdkMTU7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQU5ZTk9ORVhJU1RFTlQgICAgICAgICA9IDUnZDE0OworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FMTFVOQVZBSUwgICAgICAgICAgICAgPSA1J2QxMzsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllVTkFWQUlMICAgICAgICAgICAgID0gNSdkMTI7CitwYXJhbWV0ZXIgU0NSMV9EQkdfRE1TVEFUVVNfQUxMUlVOTklORyAgICAgICAgICAgICA9IDUnZDExOworcGFyYW1ldGVyIFNDUjFfREJHX0RNU1RBVFVTX0FOWVJVTk5JTkcgICAgICAgICAgICAgPSA1J2QxMDsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTExIQUxURUQgICAgICAgICAgICAgID0gNSdkOTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BTllIQUxURUQgICAgICAgICAgICAgID0gNSdkODsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BVVRIRU5USUNBVEVEICAgICAgICAgID0gNSdkNzsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19BVVRIQlVTWSAgICAgICAgICAgICAgID0gNSdkNjsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19SRVNFUlZFREEgICAgICAgICAgICAgID0gNSdkNTsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19ERVZUUkVFVkFMSUQgICAgICAgICAgID0gNSdkNDsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0hJICAgICAgICAgICAgID0gNSdkMzsKK3BhcmFtZXRlciBTQ1IxX0RCR19ETVNUQVRVU19WRVJTSU9OX0xPICAgICAgICAgICAgID0gNSdkMDsKKworLy8gQ09NTUFORFMKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX1RZUEVfSEkgICAgICAgICAgICAgICAgID0gNSdkMzE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9UWVBFX0xPICAgICAgICAgICAgICAgICA9IDUnZDI0OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfVFlQRV9XRFRIICAgICAgICAgICAgICAgPSBTQ1IxX0RCR19DT01NQU5EX1RZUEVfSEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0NSMV9EQkdfQ09NTUFORF9UWVBFX0xPOworCitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVTRVJWRURCICAgICA9IDUnZDIzOworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfSEkgICAgICAgPSA1J2QyMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19TSVpFX0xPICAgICAgID0gNSdkMjA7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9XRFRIICAgICA9IFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1NJWkVfSEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfU0laRV9MTzsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19SRVNFUlZFREEgICAgID0gNSdkMTk7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUE9TVEVYRUMgICAgICA9IDUnZDE4OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1RSQU5TRkVSICAgICAgPSA1J2QxNzsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU1JFR19XUklURSAgICAgICAgID0gNSdkMTY7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NSRUdfUkVHTk9fSEkgICAgICA9IDUnZDE1OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTUkVHX1JFR05PX0xPICAgICAgPSA1J2QwOworCitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNVklSVFVBTCAgICA9IDUnZDIzOworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX0FBTVNJWkVfSEkgICAgPSA1J2QyMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9BQU1TSVpFX0xPICAgID0gNSdkMjA7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fQUFNUE9TVElOQyAgICA9IDUnZDE5OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQl9ISSAgPSA1J2QxODsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREJfTE8gID0gNSdkMTc7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQ09NTUFORF9BQ0NFU1NNRU1fV1JJVEUgICAgICAgICA9IDUnZDE2OworcGFyYW1ldGVyIFNDUjFfREJHX0NPTU1BTkRfQUNDRVNTTUVNX1JFU0VSVkVEQV9ISSAgPSA1J2QxMzsKK3BhcmFtZXRlciBTQ1IxX0RCR19DT01NQU5EX0FDQ0VTU01FTV9SRVNFUlZFREFfTE8gID0gNSdkMDsKKworLy8gQUJTVFJBQ1RDUworcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUkVTRVJWRUREX0hJICAgICAgICAgPSA1J2QzMTsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVERF9MTyAgICAgICAgID0gNSdkMjk7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19QUk9HQlVGU0laRV9ISSAgICAgICA9IDUnZDI4OworcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfUFJPR0JVRlNJWkVfTE8gICAgICAgPSA1J2QyNDsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQ19ISSAgICAgICAgID0gNSdkMjM7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19SRVNFUlZFRENfTE8gICAgICAgICA9IDUnZDEzOworcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQlVTWSAgICAgICAgICAgICAgICAgPSA1J2QxMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQiAgICAgICAgICAgID0gNSdkMTE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfQUJTVFJBQ1RDU19DTURFUlJfSEkgICAgICAgICAgICA9IDUnZDEwOworcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX0xPICAgICAgICAgICAgPSA1J2Q4OworcGFyYW1ldGVyIFNDUjFfREJHX0FCU1RSQUNUQ1NfQ01ERVJSX1dEVEggICAgICAgICAgPSBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9ISQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTQ1IxX0RCR19BQlNUUkFDVENTX0NNREVSUl9MTzsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9ISSAgICAgICAgID0gNSdkNzsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX1JFU0VSVkVEQV9MTyAgICAgICAgID0gNSdkNDsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9ISSAgICAgICAgID0gNSdkMzsKK3BhcmFtZXRlciBTQ1IxX0RCR19BQlNUUkFDVENTX0RBVEFDT1VOVF9MTyAgICAgICAgID0gNSdkMDsKKworLy8gSEFSVElORk8KK3BhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19SRVNFUlZFREJfSEkgICAgICAgICAgID0gNSdkMzE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURCX0xPICAgICAgICAgICA9IDUnZDI0OworcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX05TQ1JBVENIX0hJICAgICAgICAgICAgPSA1J2QyMzsKK3BhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19OU0NSQVRDSF9MTyAgICAgICAgICAgID0gNSdkMjA7CitwYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fUkVTRVJWRURBX0hJICAgICAgICAgICA9IDUnZDE5OworcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX1JFU0VSVkVEQV9MTyAgICAgICAgICAgPSA1J2QxNzsKK3BhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUNDRVNTICAgICAgICAgICAgID0gNSdkMTY7CitwYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fREFUQVNJWkVfSEkgICAgICAgICAgICA9IDUnZDE1OworcGFyYW1ldGVyIFNDUjFfREJHX0hBUlRJTkZPX0RBVEFTSVpFX0xPICAgICAgICAgICAgPSA1J2QxMjsKK3BhcmFtZXRlciBTQ1IxX0RCR19IQVJUSU5GT19EQVRBQUREUl9ISSAgICAgICAgICAgID0gNSdkMTE7CitwYXJhbWV0ZXIgU0NSMV9EQkdfSEFSVElORk9fREFUQUFERFJfTE8gICAgICAgICAgICA9IDUnZDA7CisKKworYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9ETV9ERUZTCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9oZHUuc3ZoIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaGR1LnN2aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E1MDNmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaGR1LnN2aApAQCAtMCwwICsxLDE2MyBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3BpcGVfaGR1LnN2aD4KKy8vLyBAYnJpZWYgICAgICBIQVJUIERlYnVnIFVuaXQgZGVmaW5pdGlvbnMgZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9JTkNMVURFX0hEVV9ERUZTCitgZGVmaW5lIFNDUjFfSU5DTFVERV9IRFVfREVGUworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX2Nzci5zdmgiCisKK2BpZmRlZiBTQ1IxX01NVV9FTgorIGBkZWZpbmUgU0NSMV9IRFVfRkVBVFVSRV9NUFJWRU4KK2BlbmRpZiAvLyBTQ1IxX01NVV9FTgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gUGFyYW1ldGVycworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREVCVUdDU1JfQkFTRV9BRERSICAgICAgPSAxMidoN0IwOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREVCVUdDU1JfQUREUl9TUEFOICAgICAgPSBTQ1IxX0NTUl9BRERSX0hEVV9NU1BBTjsKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEggICAgID0gJGNsb2cyKFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfU1BBTik7Citsb2NhbHBhcmFtIGJpdCBbMzowXSAgICBTQ1IxX0hEVV9ERUJVR0NTUl9EQ1NSX1hERUJVR1ZFUiA9IDQnaDQ7Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9QQlVGX0FERFJfU1BBTiAgICAgICAgICA9IDg7Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9QQlVGX0FERFJfV0lEVEggICAgICAgICA9ICRjbG9nMihTQ1IxX0hEVV9QQlVGX0FERFJfU1BBTik7Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9EQVRBX1JFR19XSURUSCAgICAgICAgICA9IDMyOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfQ09SRV9JTlNUUl9XSURUSCAgICAgICAgPSAzMjsKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVHlwZXMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIEhBUlQgRGVidWcgU3RhdGVzOgordHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKKyAgICBTQ1IxX0hEVV9EQkdTVEFURV9SRVNFVCAgICAgICAgID0gMidiMDAsCisgICAgU0NSMV9IRFVfREJHU1RBVEVfUlVOICAgICAgICAgICA9IDInYjAxLAorICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQgICAgICAgPSAyJ2IxMCwKKyAgICBTQ1IxX0hEVV9EQkdTVEFURV9EUlVOICAgICAgICAgID0gMidiMTEKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfSERVX0RCR1NUQVRFX1hYWCAgICAgICAgICAgPSAnWAorYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KK30gdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZTsKKwordHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKKyAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRSAgICAgICAgICA9IDInYjAwLAorICAgIFNDUjFfSERVX1BCVUZTVEFURV9GRVRDSCAgICAgICAgID0gMidiMDEsCisgICAgU0NSMV9IRFVfUEJVRlNUQVRFX0VYQ0lOSkVDVCAgICAgPSAyJ2IxMCwKKyAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQgICAgICA9IDInYjExCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfWFhYICAgICAgICAgICA9ICdYCitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorfSB0eXBlX3NjcjFfaGR1X3BidWZzdGF0ZXNfZTsKKwordHlwZWRlZiBlbnVtIGxvZ2ljIHsKKyAgICBTQ1IxX0hEVV9IQVJUQ01EX1JFU1VNRSAgICAgICAgID0gMSdiMCwKKyAgICBTQ1IxX0hEVV9IQVJUQ01EX0hBTFQgICAgICAgICAgID0gMSdiMQorYGlmZGVmIFNDUjFfWFBST1BfRU4KKyAgICAsCisgICAgU0NSMV9IRFVfSEFSVENNRF9YWFggICAgICAgICAgICA9IDEnYlgKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9oZHVfaGFydF9jb21tYW5kX2U7CisKK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9IRFVfRkVUQ0hfU1JDX05PUk1BTCAgICAgICA9IDEnYjAsCisgICAgU0NSMV9IRFVfRkVUQ0hfU1JDX1BCVUYgICAgICAgICA9IDEnYjEKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfSERVX0ZFVENIX1NSQ19YWFggICAgICAgICAgPSAxJ2JYCitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorfSB0eXBlX3NjcjFfaGR1X2ZldGNoX3NyY19lOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIC8vbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfbjsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWJyZWFrOworICAgIHR5cGVfc2NyMV9oZHVfZGJnc3RhdGVzX2UgICAgICAgICAgIGRiZ19zdGF0ZTsKK30gdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3M7CisKKy8vIERlYnVnIE1vZGUgUmVkaXJlY3Rpb24gY29udHJvbDoKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3N0ZXA7ICAgICAgICAgIC8vIFNpbmdsZSBTdGVwCisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWJyZWFrOyAgICAgICAgIC8vIFJlZGlyZWN0aW9uIGFmdGVyIEVCUkVBSyBleGVjdXRpb24KK30gdHlwZV9zY3IxX2hkdV9yZWRpcmVjdF9zOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9kc2JsOworICAgIHR5cGVfc2NyMV9oZHVfZmV0Y2hfc3JjX2UgICAgICAgICAgIGZldGNoX3NyYzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY19hZHZtdF9kc2JsOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YnJrcHRfZHNibDsKKyAgICB0eXBlX3NjcjFfaGR1X3JlZGlyZWN0X3MgICAgICAgICAgICByZWRpcmVjdDsKK30gdHlwZV9zY3IxX2hkdV9ydW5jdHJsX3M7CisKKy8vIEhBUlQgSGFsdCBTdGF0dXM6Cit0eXBlZGVmIGVudW0gbG9naWMgWzI6MF0geworICAgIFNDUjFfSERVX0hBTFRDQVVTRV9OT05FICAgICAgICAgPSAzJ2IwMDAsCisgICAgU0NSMV9IRFVfSEFMVENBVVNFX0VCUkVBSyAgICAgICA9IDMnYjAwMSwKKyAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfVE1SRVEgICAgICAgID0gMydiMDEwLAorICAgIFNDUjFfSERVX0hBTFRDQVVTRV9ETVJFUSAgICAgICAgPSAzJ2IwMTEsCisgICAgU0NSMV9IRFVfSEFMVENBVVNFX1NTVEVQICAgICAgICA9IDMnYjEwMCwKKyAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfUlNURVhJVCAgICAgID0gMydiMTAxCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfWFhYICAgICAgICAgID0gJ1gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9oZHVfaGFsdGNhdXNlX2U7CisKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OworICAgIHR5cGVfc2NyMV9oZHVfaGFsdGNhdXNlX2UgICAgICAgICAgIGNhdXNlOworfSB0eXBlX3NjcjFfaGR1X2hhbHRzdGF0dXNfczsKKworCisvLyBEZWJ1ZyBDU1IgbWFwCitsb2NhbHBhcmFtIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RDU1IgICAgICAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIJyggJ2QwICk7Citsb2NhbHBhcmFtIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RQQyAgICAgICAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIJyggJ2QxICk7Citsb2NhbHBhcmFtIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMCAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIJyggJ2QyICk7Citsb2NhbHBhcmFtIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMSAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIJyggJ2QzICk7CisKK2xvY2FscGFyYW0gYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRENTUiAgICAgID0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgKyBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EQ1NSOworbG9jYWxwYXJhbSBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0hEVV9EQkdDU1JfQUREUl9EUEMgICAgICAgPSBTQ1IxX0NTUl9BRERSX0hEVV9NQkFTRSArIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RQQzsKK2xvY2FscGFyYW0gYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRFNDUkFUQ0gwID0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgKyBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EU0NSQVRDSDA7Citsb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMSA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gxOworCisvLyBEZWJ1ZyBDU1JzIDo6IERDU1IKK3R5cGVkZWYgZW51bSBpbnQgeworICAgIFNDUjFfSERVX0RDU1JfUFJWX0JJVF9SICAgICAgICAgPSAwLAorICAgIFNDUjFfSERVX0RDU1JfUFJWX0JJVF9MICAgICAgICAgPSAxLAorICAgIFNDUjFfSERVX0RDU1JfU1RFUF9CSVQgICAgICAgICAgPSAyLAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjBfQklUX1IgICAgICAgPSAzLAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjBfQklUX0wgICAgICAgPSA1LAorICAgIFNDUjFfSERVX0RDU1JfQ0FVU0VfQklUX1IgICAgICAgPSA2LAorICAgIFNDUjFfSERVX0RDU1JfQ0FVU0VfQklUX0wgICAgICAgPSA4LAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjFfQklUX1IgICAgICAgPSA5LAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjFfQklUX0wgICAgICAgPSAxMCwKKyAgICBTQ1IxX0hEVV9EQ1NSX1NURVBJRV9CSVQgICAgICAgID0gMTEsCisgICAgU0NSMV9IRFVfRENTUl9SU1JWMl9CSVRfUiAgICAgICA9IDEyLAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjJfQklUX0wgICAgICAgPSAxNCwKKyAgICBTQ1IxX0hEVV9EQ1NSX0VCUkVBS01fQklUICAgICAgID0gMTUsCisgICAgU0NSMV9IRFVfRENTUl9SU1JWM19CSVRfUiAgICAgICA9IDE2LAorICAgIFNDUjFfSERVX0RDU1JfUlNSVjNfQklUX0wgICAgICAgPSAyNywKKyAgICBTQ1IxX0hEVV9EQ1NSX1hERUJVR1ZFUl9CSVRfUiAgID0gMjgsCisgICAgU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX0wgICA9IDMxCit9IHR5cGVfc2NyMV9oZHVfZGNzcl9iaXRzX2U7CisKKy8vbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREVCVUdDU1JfRENTUl9QUlZfV0lEVEggPSBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfUisxOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljIFtTQ1IxX0hEVV9EQ1NSX1hERUJVR1ZFUl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1hERUJVR1ZFUl9CSVRfUjowXSAgIHhkZWJ1Z3ZlcjsKKyAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWM19CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYzX0JJVF9SOjBdICAgICAgICAgICByc3J2MzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYnJlYWttOworICAgIGxvZ2ljIFtTQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9MLVNDUjFfSERVX0RDU1JfUlNSVjJfQklUX1I6MF0gICAgICAgICAgIHJzcnYyOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBpZTsKKyAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMV9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9SOjBdICAgICAgICAgICByc3J2MTsKKyAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfTC1TQ1IxX0hEVV9EQ1NSX0NBVVNFX0JJVF9SOjBdICAgICAgICAgICBjYXVzZTsKKyAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMF9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9SOjBdICAgICAgICAgICByc3J2MDsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOworICAgIGxvZ2ljIFtTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfUjowXSAgICAgICAgICAgICAgIHBydjsKK30gdHlwZV9zY3IxX2hkdV9kY3NyX3M7CisKKworYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9IRFVfREVGUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9pcGljLnN2aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQyZGMzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfaXBpYy5zdmgKQEAgLTAsMCArMSw1OCBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2lwaWMuc3ZoPgorLy8vIEBicmllZiAgICAgIElQSUMgaGVhZGVyIGZpbGUKKy8vLworCitgaWZuZGVmIFNDUjFfSVBJQ19TVkgKK2BkZWZpbmUgU0NSMV9JUElDX1NWSAorCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKworYGlmZGVmIFNDUjFfSVBJQ19FTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfVkVDVF9OVU0gICAgICAgPSAxNjsgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDIgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfVkVDVF9XSURUSCAgICAgPSAkY2xvZzIoU0NSMV9JUlFfVkVDVF9OVU0rMSk7CitwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0xJTkVTX05VTSAgICAgID0gU0NSMV9JUlFfVkVDVF9OVU07CitwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0xJTkVTX1dJRFRIICAgID0gJGNsb2cyKFNDUjFfSVJRX0xJTkVTX05VTSk7CitwYXJhbWV0ZXIgICBsb2dpYyBbU0NSMV9JUlFfVkVDVF9XSURUSC0xOjBdIFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0gID0gU0NSMV9JUlFfVkVDVF9XSURUSCcoU0NSMV9JUlFfVkVDVF9OVU0pOworcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lSUV9JRFhfV0lEVEggICAgICA9ICRjbG9nMihTQ1IxX0lSUV9WRUNUX05VTSk7CisKKy8vIEFkZHJlc3MgZGVjb2RpbmcgcGFyYW1ldGVycworcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfQ0lTViAgICAgICAgICA9IDMnaDA7ICAgIC8vIFJPCitwYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19DSUNTUiAgICAgICAgID0gMydoMTsgICAgLy8ge0lQLCBJRX0KK3BhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgICAgICAgICAgPSAzJ2gyOyAgICAvLyBSVzFDCitwYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JU1ZSICAgICAgICAgID0gMydoMzsgICAgLy8gUk8KK3BhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0VPSSAgICAgICAgICAgPSAzJ2g0OyAgICAvLyBSWlcKK3BhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgICAgICAgICAgPSAzJ2g1OyAgICAvLyBSWlcKK3BhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lEWCAgICAgICAgICAgPSAzJ2g2OyAgICAvLyBSVworcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUiAgICAgICAgICA9IDMnaDc7ICAgIC8vIFJXCisKK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSVAgICAgICAgPSAwOworcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JRSAgICAgICA9IDE7CitwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0lNICAgICAgID0gMjsKK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSU5WICAgICAgPSAzOworcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JUyAgICAgICA9IDQ7CitwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0IgID0gODsKK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfUFJWX01TQiAgPSA5OworcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9MTl9MU0IgICA9IDEyOworcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9MTl9NU0IgICA9IFNDUjFfSVBJQ19JQ1NSX0xOX0xTQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNDUjFfSVJRX0xJTkVTX1dJRFRIOworCitwYXJhbWV0ZXIgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19QUlZfTSAgICAgICAgID0gMidiMTE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHlwZXMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBlbnVtIGxvZ2ljIHsKKyAgICBTQ1IxX0NTUjJJUElDX1JELAorICAgIFNDUjFfQ1NSMklQSUNfV1IKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfQ1NSMklQSUNfRVJST1IgPSAneAorYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KK30gdHlwZV9zY3IxX2NzcjJpcGljX3dyX2U7CisKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KK2BlbmRpZiAvLyBTQ1IxX0lQSUNfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9tZW1pZi5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9tZW1pZi5zdmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNWQxZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX21lbWlmLnN2aApAQCAtMCwwICsxLDQ5IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfbWVtaWYuc3ZoPgorLy8vIEBicmllZiAgICAgIE1lbW9yeSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9NRU1JRl9TVkgKK2BkZWZpbmUgU0NSMV9NRU1JRl9TVkgKKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWVtb3J5IGNvbW1hbmQgZW51bQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWMgeworICAgIFNDUjFfTUVNX0NNRF9SRCAgICAgPSAxJ2IwLAorICAgIFNDUjFfTUVNX0NNRF9XUiAgICAgPSAxJ2IxCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX01FTV9DTURfRVJST1IgID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9tZW1fY21kX2U7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWVtb3J5IGRhdGEgd2lkdGggZW51bQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWNbMTowXSB7CisgICAgU0NSMV9NRU1fV0lEVEhfQllURSAgICAgPSAyJ2IwMCwKKyAgICBTQ1IxX01FTV9XSURUSF9IV09SRCAgICA9IDInYjAxLAorICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgICAgID0gMidiMTAKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfTUVNX1dJRFRIX0VSUk9SICAgID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9tZW1fd2lkdGhfZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNZW1vcnkgcmVzcG9uc2UgZW51bQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWNbMTowXSB7CisgICAgU0NSMV9NRU1fUkVTUF9OT1RSRFkgICAgPSAyJ2IwMCwKKyAgICBTQ1IxX01FTV9SRVNQX1JEWV9PSyAgICA9IDInYjAxLAorICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSICAgID0gMidiMTAKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfTUVNX1JFU1BfRVJST1IgICAgID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9tZW1fcmVzcF9lOworCitgZW5kaWYgLy8gU0NSMV9NRU1JRl9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3Jpc2N2X2lzYV9kZWNvZGluZy5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDNkODkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9yaXNjdl9pc2FfZGVjb2Rpbmcuc3ZoCkBAIC0wLDAgKzEsMTg1IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfcmlzY3ZfaXNhX2RlY29kaW5nLnN2aD4KKy8vLyBAYnJpZWYgICAgICBSSVNDLVYgSVNBIGRlZmluaXRpb25zIGZpbGUKKy8vLworCitgaWZuZGVmIFNDUjFfUklTQ1ZfSVNBX0RFQ09ESU5HX1NWSAorYGRlZmluZSBTQ1IxX1JJU0NWX0lTQV9ERUNPRElOR19TVkgKKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCitgaW5jbHVkZSAic2NyMV9hcmNoX3R5cGVzLnN2aCIKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnN0cnVjdGlvbiB0eXBlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWMgWzE6MF0geworICAgIFNDUjFfSU5TVFJfUlZDMCAgICAgPSAyJ2IwMCwKKyAgICBTQ1IxX0lOU1RSX1JWQzEgICAgID0gMidiMDEsCisgICAgU0NSMV9JTlNUUl9SVkMyICAgICA9IDInYjEwLAorICAgIFNDUjFfSU5TVFJfUlZJICAgICAgPSAyJ2IxMQorfSB0eXBlX3NjcjFfaW5zdHJfdHlwZV9lOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJWMzJJIG9wY29kZXMgKGJpdHMgNjoyKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWMgWzY6Ml0geworICAgIFNDUjFfT1BDT0RFX0xPQUQgICAgICAgID0gNSdiMDAwMDAsCisgICAgU0NSMV9PUENPREVfTUlTQ19NRU0gICAgPSA1J2IwMDAxMSwKKyAgICBTQ1IxX09QQ09ERV9PUF9JTU0gICAgICA9IDUnYjAwMTAwLAorICAgIFNDUjFfT1BDT0RFX0FVSVBDICAgICAgID0gNSdiMDAxMDEsCisgICAgU0NSMV9PUENPREVfU1RPUkUgICAgICAgPSA1J2IwMTAwMCwKKyAgICBTQ1IxX09QQ09ERV9PUCAgICAgICAgICA9IDUnYjAxMTAwLAorICAgIFNDUjFfT1BDT0RFX0xVSSAgICAgICAgID0gNSdiMDExMDEsCisgICAgU0NSMV9PUENPREVfQlJBTkNIICAgICAgPSA1J2IxMTAwMCwKKyAgICBTQ1IxX09QQ09ERV9KQUxSICAgICAgICA9IDUnYjExMDAxLAorICAgIFNDUjFfT1BDT0RFX0pBTCAgICAgICAgID0gNSdiMTEwMTEsCisgICAgU0NSMV9PUENPREVfU1lTVEVNICAgICAgPSA1J2IxMTEwMAorfSB0eXBlX3NjcjFfcnZpX29wY29kZV9lOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSUFMVSBtYWluIG9wZXJhbmRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU0NSMV9JQUxVX09QX0FMTF9OVU1fRSA9IDI7Citsb2NhbHBhcmFtIFNDUjFfSUFMVV9PUF9XSURUSF9FICAgPSAkY2xvZzIoU0NSMV9JQUxVX09QX0FMTF9OVU1fRSk7Cit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfSUFMVV9PUF9XSURUSF9FLTE6MF0geworICAgIFNDUjFfSUFMVV9PUF9SRUdfSU1NLCAgICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IGltbQorICAgIFNDUjFfSUFMVV9PUF9SRUdfUkVHICAgICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IHJzMgorfSB0eXBlX3NjcjFfaWFsdV9vcF9zZWxfZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJQUxVIG1haW4gY29tbWFuZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGlmZGVmIFNDUjFfUlZNX0VYVAorbG9jYWxwYXJhbSBTQ1IxX0lBTFVfQ01EX0FMTF9OVU1fRSAgICA9IDIzOworYGVsc2UgLy8gflNDUjFfUlZNX0VYVAorbG9jYWxwYXJhbSBTQ1IxX0lBTFVfQ01EX0FMTF9OVU1fRSAgICA9IDE1OworYGVuZGlmIC8vIH5TQ1IxX1JWTV9FWFQKK2xvY2FscGFyYW0gU0NSMV9JQUxVX0NNRF9XSURUSF9FICAgICAgPSAkY2xvZzIoU0NSMV9JQUxVX0NNRF9BTExfTlVNX0UpOwordHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0lBTFVfQ01EX1dJRFRIX0UtMTowXSB7CisgICAgU0NSMV9JQUxVX0NNRF9OT05FICA9ICcwLCAgIC8vIElBTFUgZGlzYWJsZQorICAgIFNDUjFfSUFMVV9DTURfQU5ELCAgICAgICAgICAvLyBvcDEgJiBvcDIKKyAgICBTQ1IxX0lBTFVfQ01EX09SLCAgICAgICAgICAgLy8gb3AxIHwgb3AyCisgICAgU0NSMV9JQUxVX0NNRF9YT1IsICAgICAgICAgIC8vIG9wMSBeIG9wMgorICAgIFNDUjFfSUFMVV9DTURfQURELCAgICAgICAgICAvLyBvcDEgKyBvcDIKKyAgICBTQ1IxX0lBTFVfQ01EX1NVQiwgICAgICAgICAgLy8gb3AxIC0gb3AyCisgICAgU0NSMV9JQUxVX0NNRF9TVUJfTFQsICAgICAgIC8vIG9wMSA8IG9wMgorICAgIFNDUjFfSUFMVV9DTURfU1VCX0xUVSwgICAgICAvLyBvcDEgdTwgb3AyCisgICAgU0NSMV9JQUxVX0NNRF9TVUJfRVEsICAgICAgIC8vIG9wMSA9IG9wMgorICAgIFNDUjFfSUFMVV9DTURfU1VCX05FLCAgICAgICAvLyBvcDEgIT0gb3AyCisgICAgU0NSMV9JQUxVX0NNRF9TVUJfR0UsICAgICAgIC8vIG9wMSA+PSBvcDIKKyAgICBTQ1IxX0lBTFVfQ01EX1NVQl9HRVUsICAgICAgLy8gb3AxIHU+PSBvcDIKKyAgICBTQ1IxX0lBTFVfQ01EX1NMTCwgICAgICAgICAgLy8gb3AxIDw8IG9wMgorICAgIFNDUjFfSUFMVV9DTURfU1JMLCAgICAgICAgICAvLyBvcDEgPj4gb3AyCisgICAgU0NSMV9JQUxVX0NNRF9TUkEgICAgICAgICAgIC8vIG9wMSA+Pj4gb3AyCitgaWZkZWYgU0NSMV9SVk1fRVhUCisgICAgLAorICAgIFNDUjFfSUFMVV9DTURfTVVMLCAgICAgICAgICAvLyBsb3codW5zaWcob3AxKSAqIHVuc2lnKG9wMikpCisgICAgU0NSMV9JQUxVX0NNRF9NVUxIVSwgICAgICAgIC8vIGhpZ2godW5zaWcob3AxKSAqIHVuc2lnKG9wMikpCisgICAgU0NSMV9JQUxVX0NNRF9NVUxIU1UsICAgICAgIC8vIGhpZ2gob3AxICogdW5zaWcob3AyKSkKKyAgICBTQ1IxX0lBTFVfQ01EX01VTEgsICAgICAgICAgLy8gaGlnaChvcDEgKiBvcDIpCisgICAgU0NSMV9JQUxVX0NNRF9ESVYsICAgICAgICAgIC8vIG9wMSAvIG9wMgorICAgIFNDUjFfSUFMVV9DTURfRElWVSwgICAgICAgICAvLyBvcDEgdS8gb3AyCisgICAgU0NSMV9JQUxVX0NNRF9SRU0sICAgICAgICAgIC8vIG9wMSAlIG9wMgorICAgIFNDUjFfSUFMVV9DTURfUkVNVSAgICAgICAgICAvLyBvcDEgdSUgb3AyCitgZW5kaWYgIC8vIFNDUjFfUlZNX0VYVAorfSB0eXBlX3NjcjFfaWFsdV9jbWRfc2VsX2U7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSUFMVSBTVU0yIG9wZXJhbmRzIChyZXN1bHQgaXMgSlVNUC9CUkFOQ0ggdGFyZ2V0LCBMT0FEL1NUT1JFIGFkZHJlc3MpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU0NSMV9TVU0yX09QX0FMTF9OVU1fRSAgICA9IDI7Citsb2NhbHBhcmFtIFNDUjFfU1VNMl9PUF9XSURUSF9FICAgICAgPSAkY2xvZzIoU0NSMV9TVU0yX09QX0FMTF9OVU1fRSk7Cit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfU1VNMl9PUF9XSURUSF9FLTE6MF0geworICAgIFNDUjFfU1VNMl9PUF9QQ19JTU0sICAgICAgICAvLyBvcDEgPSBjdXJyX3BjOyBvcDIgPSBpbW0gKEFVSVBDLCB0YXJnZXQgbmV3X3BjIGZvciBKQUwgYW5kIGJyYW5jaGVzKQorICAgIFNDUjFfU1VNMl9PUF9SRUdfSU1NICAgICAgICAvLyBvcDEgPSByczE7IG9wMiA9IGltbSAodGFyZ2V0IG5ld19wYyBmb3IgSkFMUiwgTE9BRC9TVE9SRSBhZGRyZXNzKQorYGlmZGVmIFNDUjFfWFBST1BfRU4KKyAgICAsCisgICAgU0NSMV9TVU0yX09QX0VSUk9SID0gJ3gKK2BlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCit9IHR5cGVfc2NyMV9pYWx1X3N1bTJfb3Bfc2VsX2U7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTFNVIGNvbW1hbmRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU0NSMV9MU1VfQ01EX0FMTF9OVU1fRSAgID0gOTsKK2xvY2FscGFyYW0gU0NSMV9MU1VfQ01EX1dJRFRIX0UgICAgID0gJGNsb2cyKFNDUjFfTFNVX0NNRF9BTExfTlVNX0UpOwordHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX0xTVV9DTURfV0lEVEhfRS0xOjBdIHsKKyAgICBTQ1IxX0xTVV9DTURfTk9ORSA9ICcwLAorICAgIFNDUjFfTFNVX0NNRF9MQiwKKyAgICBTQ1IxX0xTVV9DTURfTEgsCisgICAgU0NSMV9MU1VfQ01EX0xXLAorICAgIFNDUjFfTFNVX0NNRF9MQlUsCisgICAgU0NSMV9MU1VfQ01EX0xIVSwKKyAgICBTQ1IxX0xTVV9DTURfU0IsCisgICAgU0NSMV9MU1VfQ01EX1NILAorICAgIFNDUjFfTFNVX0NNRF9TVworfSB0eXBlX3NjcjFfbHN1X2NtZF9zZWxfZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDU1Igb3BlcmFuZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSBTQ1IxX0NTUl9PUF9BTExfTlVNX0UgICA9IDI7Citsb2NhbHBhcmFtIFNDUjFfQ1NSX09QX1dJRFRIX0UgICAgID0gJGNsb2cyKFNDUjFfQ1NSX09QX0FMTF9OVU1fRSk7Cit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfQ1NSX09QX1dJRFRIX0UtMTowXSB7CisgICAgU0NSMV9DU1JfT1BfSU1NLAorICAgIFNDUjFfQ1NSX09QX1JFRworfSB0eXBlX3NjcjFfY3NyX29wX3NlbF9lOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENTUiBjb21tYW5kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2NhbHBhcmFtIFNDUjFfQ1NSX0NNRF9BTExfTlVNX0UgICA9IDQ7Citsb2NhbHBhcmFtIFNDUjFfQ1NSX0NNRF9XSURUSF9FICAgICA9ICRjbG9nMihTQ1IxX0NTUl9DTURfQUxMX05VTV9FKTsKK3R5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9DU1JfQ01EX1dJRFRIX0UtMTowXSB7CisgICAgU0NSMV9DU1JfQ01EX05PTkUgPSAnMCwKKyAgICBTQ1IxX0NTUl9DTURfV1JJVEUsCisgICAgU0NSMV9DU1JfQ01EX1NFVCwKKyAgICBTQ1IxX0NTUl9DTURfQ0xFQVIKK30gdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2U7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTVBSRiByZCB3cml0ZWJhY2sgc291cmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU0NSMV9SRF9XQl9BTExfTlVNX0UgPSA3OworbG9jYWxwYXJhbSBTQ1IxX1JEX1dCX1dJRFRIX0UgICA9ICRjbG9nMihTQ1IxX1JEX1dCX0FMTF9OVU1fRSk7Cit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfUkRfV0JfV0lEVEhfRS0xOjBdIHsKKyAgICBTQ1IxX1JEX1dCX05PTkUgPSAnMCwKKyAgICBTQ1IxX1JEX1dCX0lBTFUsICAgICAgICAgICAgLy8gSUFMVSBtYWluIHJlc3VsdAorICAgIFNDUjFfUkRfV0JfU1VNMiwgICAgICAgICAgICAvLyBJQUxVIFNVTTIgcmVzdWx0IChBVUlQQykKKyAgICBTQ1IxX1JEX1dCX0lNTSwgICAgICAgICAgICAgLy8gTFVJCisgICAgU0NSMV9SRF9XQl9JTkNfUEMsICAgICAgICAgIC8vIEpBTChSKQorICAgIFNDUjFfUkRfV0JfTFNVLCAgICAgICAgICAgICAvLyBMb2FkIGZyb20gRE1FTQorICAgIFNDUjFfUkRfV0JfQ1NSICAgICAgICAgICAgICAvLyBSZWFkIENTUgorfSB0eXBlX3NjcjFfcmRfd2Jfc2VsX2U7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSURVIHRvIEVYVSBmdWxsIGNvbW1hbmQgc3RydWN0dXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU0NSMV9HUFJfRklFTERfV0lEVEggPSA1OworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyX3J2YzsgICAgICAvLyB1c2VkIHdpdGggYSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgSUZVIGFjY2VzcyBmYXVsdCBleGNlcHRpb24KKyAgICB0eXBlX3NjcjFfaWFsdV9vcF9zZWxfZSAgICAgICAgICAgICBpYWx1X29wOworICAgIHR5cGVfc2NyMV9pYWx1X2NtZF9zZWxfZSAgICAgICAgICAgIGlhbHVfY21kOworICAgIHR5cGVfc2NyMV9pYWx1X3N1bTJfb3Bfc2VsX2UgICAgICAgIHN1bTJfb3A7CisgICAgdHlwZV9zY3IxX2xzdV9jbWRfc2VsX2UgICAgICAgICAgICAgbHN1X2NtZDsKKyAgICB0eXBlX3NjcjFfY3NyX29wX3NlbF9lICAgICAgICAgICAgICBjc3Jfb3A7CisgICAgdHlwZV9zY3IxX2Nzcl9jbWRfc2VsX2UgICAgICAgICAgICAgY3NyX2NtZDsKKyAgICB0eXBlX3NjcjFfcmRfd2Jfc2VsX2UgICAgICAgICAgICAgICByZF93Yl9zZWw7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcF9yZXE7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX3JlcTsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcmV0X3JlcTsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW5jZWlfcmVxOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdmaV9yZXE7CisgICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcnMxX2FkZHI7ICAgICAgIC8vIGFsc28gdXNlZCBhcyB6aW1tIGZvciBDU1JSeEkgaW5zdHJ1Y3Rpb25zCisgICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcnMyX2FkZHI7CisgICAgbG9naWMgW1NDUjFfR1BSX0ZJRUxEX1dJRFRILTE6MF0gICAgcmRfYWRkcjsKKyAgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICBpbW07ICAgICAgICAgICAgLy8gdXNlZCBhcyB7ZnVuY3QzLCBDU1IgYWRkcmVzc30gZm9yIENTUiBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCBhcyBpbnN0cnVjdGlvbiBmaWVsZCBmb3IgaWxsZWdhbCBpbnN0cnVjdGlvbiBleGNlcHRpb24KKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfcmVxOworICAgIHR5cGVfc2NyMV9leGNfY29kZV9lICAgICAgICAgICAgICAgIGV4Y19jb2RlOworfSB0eXBlX3NjcjFfZXh1X2NtZF9zOworCitgZW5kaWYgLy8gU0NSMV9SSVNDVl9JU0FfREVDT0RJTkdfU1ZICisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3NjdS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zY3Uuc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTkzODYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zY3Uuc3ZoCkBAIC0wLDAgKzEsODQgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9zY3Uuc3ZoPgorLy8vIEBicmllZiAgICAgIFNDVSBoZWFkZXIgZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9JTkNMVURFX1NDVV9ERUZTCitgZGVmaW5lIFNDUjFfSU5DTFVERV9TQ1VfREVGUworCisvL2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFBhcmFtZXRlcnMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEggICAgICAgID0gMjsKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRIICAgICAgPSAyOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfV0lEVEggICAgICA9IDQ7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBUeXBlcworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgZW51bSBsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSC0xOjBdIHsKKyAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1dSSVRFICAgICAgID0gMidoMCwKKyAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1JFQUQgICAgICAgID0gMidoMSwKKyAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX1NFVEJJVFMgICAgID0gMidoMiwKKyAgICBTQ1IxX1NDVV9TWVNDVFJMX09QX0NMUkJJVFMgICAgID0gMidoMworYGlmZGVmIFNDUjFfWFBST1BfRU4KKyAgICAsCisgICAgU0NSMV9TQ1VfU1lTQ1RSTF9PUF9YWFggICAgICAgICA9ICdYCitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfb3BfZTsKKwordHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEgtMTowXSB7CisgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX0NPTlRST0wgICA9IDInaDAsCisgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX01PREUgICAgICA9IDInaDEsCisgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX1NUQVRVUyAgICA9IDInaDIsCisgICAgU0NSMV9TQ1VfU1lTQ1RSTF9BRERSX1NUSUNLWSAgICA9IDInaDMKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCisgICAgLAorICAgIFNDUjFfU0NVX1NZU0NUUkxfQUREUl9YWFggICAgICAgPSAnWAorYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KK30gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX2FkZHJfZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyBbU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX1dJRFRILTE6MF0gIGRhdGE7CisgICAgbG9naWMgW1NDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9XSURUSC0xOjBdICBhZGRyOworICAgIGxvZ2ljIFtTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRILTE6MF0gICAgb3A7Cit9IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9zOworCit0eXBlZGVmIGVudW0gaW50IHVuc2lnbmVkIHsKKyAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX0JJVF9SICAgICAgICAgICAgICAgICAgPSAnaDAsCisgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9CSVRfTCAgICAgICAgICAgICAgICAgID0gU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSC0xLAorICAgIFNDUjFfU0NVX0RSX1NZU0NUUkxfQUREUl9CSVRfUiAgICAgICAgICAgICAgICA9IFNDUjFfU0NVX0RSX1NZU0NUUkxfT1BfV0lEVEgsCisgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX0JJVF9MICAgICAgICAgICAgICAgID0gU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRIIC0gMSwKKyAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfQklUX1IgICAgICAgICAgICAgICAgPSBTQ1IxX1NDVV9EUl9TWVNDVFJMX09QX1dJRFRIICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0FERFJfV0lEVEgsCisgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9EQVRBX0JJVF9MICAgICAgICAgICAgICAgID0gU0NSMV9TQ1VfRFJfU1lTQ1RSTF9PUF9XSURUSCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9TQ1VfRFJfU1lTQ1RSTF9BRERSX1dJRFRIICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1NDVV9EUl9TWVNDVFJMX0RBVEFfV0lEVEggLSAxCit9IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9kcl9iaXRzX2U7CisKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNydjsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3Jlc2V0OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZXNldDsKK30gdHlwZV9zY3IxX3NjdV9zeXNjdHJsX2NvbnRyb2xfcmVnX3M7CisKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNydjsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHVfcnN0X2JodjsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbV9yc3RfYmh2OworfSB0eXBlX3NjcjFfc2N1X3N5c2N0cmxfbW9kZV9yZWdfczsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHVfcmVzZXQ7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1fcmVzZXQ7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNldDsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmVzZXQ7Cit9IHR5cGVfc2NyMV9zY3Vfc3lzY3RybF9zdGF0dXNfcmVnX3M7CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9TQ1VfREVGUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfc2VhcmNoX21zMS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV9zZWFyY2hfbXMxLnN2aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzUxNmJhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL2luY2x1ZGVzL3NjcjFfc2VhcmNoX21zMS5zdmgKQEAgLTAsMCArMSw5NCBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9zZWFyY2hfbXMxLnN2aD4KKy8vLyBAYnJpZWYgICAgICBNb3N0IHNpZ25pZmljYW50IG9uZSBzZWFyY2ggZnVuY3Rpb24KKy8vLworCitgaWZuZGVmIFNDUjFfU0VBUkNIX01TMV9TVkgKK2BkZWZpbmUgU0NSMV9TRUFSQ0hfTVMxX1NWSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBsb2dpYyAgICAgICB2ZDsKKyAgICBsb2dpYyAgICAgICBpZHg7Cit9IHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfczsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGxvZ2ljICAgICAgICAgICB2ZDsKKyAgICBsb2dpYyBbNDowXSAgICAgaWR4OworfSB0eXBlX3NjcjFfc2VhcmNoX29uZV8zMl9zOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExlYWRpbmcgWmVyb3MgQ291bnQgRnVuY3Rpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZnVuY3Rpb24gYXV0b21hdGljIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyBzY3IxX2xlYWRfemVyb3NfY250XzIoCisgICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgZGluCispOworICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7CitiZWdpbgorICAgIHRtcC52ZCAgPSB8ZGluOworICAgIHRtcC5pZHggPSB+ZGluWzFdOworICAgIHJldHVybiAgdG1wOworZW5kCitlbmRmdW5jdGlvbiA6IHNjcjFfbGVhZF96ZXJvc19jbnRfMgorCitmdW5jdGlvbiBhdXRvbWF0aWMgbG9naWMgWzQ6MF0gc2NyMV9sZWFkX3plcm9zX2NudF8zMigKKyAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICBkaW4KKyk7CitiZWdpbgorICAgIGxvZ2ljIFsxNTowXSAgICBzdGFnZTFfdmQ7CisgICAgbG9naWMgWzc6MF0gICAgIHN0YWdlMl92ZDsKKyAgICBsb2dpYyBbMzowXSAgICAgc3RhZ2UzX3ZkOworICAgIGxvZ2ljIFsxOjBdICAgICBzdGFnZTRfdmQ7CisKKyAgICBsb2dpYyAgICAgICAgICAgc3RhZ2UxX2lkeCBbMTU6MF07CisgICAgbG9naWMgWzE6MF0gICAgIHN0YWdlMl9pZHggWzc6MF07CisgICAgbG9naWMgWzI6MF0gICAgIHN0YWdlM19pZHggWzM6MF07CisgICAgbG9naWMgWzM6MF0gICAgIHN0YWdlNF9pZHggWzE6MF07CisgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMzJfcyB0bXA7CisgICAgbG9naWMgWzQ6MF0gICAgIHJlczsKKworICAgIC8vIFN0YWdlIDEKKyAgICBmb3IgKGludCB1bnNpZ25lZCBpPTA7IGk8MTY7ICsraSkgYmVnaW4KKyAgICAgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKKyAgICAgICAgdG1wID0gc2NyMV9sZWFkX3plcm9zX2NudF8yKGRpblsoaSsxKSoyLTEtOjJdKTsKKyAgICAgICAgc3RhZ2UxX3ZkW2ldICA9IHRtcC52ZDsKKyAgICAgICAgc3RhZ2UxX2lkeFtpXSA9IHRtcC5pZHg7CisgICAgZW5kCisKKyAgICAvLyBTdGFnZSAyCisgICAgZm9yIChpbnQgdW5zaWduZWQgaT0wOyBpPDg7ICsraSkgYmVnaW4KKyAgICAgICAgdHlwZV9zY3IxX3NlYXJjaF9vbmVfMl9zIHRtcDsKKyAgICAgICAgdG1wID0gc2NyMV9sZWFkX3plcm9zX2NudF8yKHN0YWdlMV92ZFsoaSsxKSoyLTEtOjJdKTsKKyAgICAgICAgc3RhZ2UyX3ZkW2ldICA9IHRtcC52ZDsKKyAgICAgICAgc3RhZ2UyX2lkeFtpXSA9ICh0bXAuaWR4KSA/IHt0bXAuaWR4LCBzdGFnZTFfaWR4WzIqaV19IDoge3RtcC5pZHgsIHN0YWdlMV9pZHhbMippKzFdfTsKKyAgICBlbmQKKworICAgIC8vIFN0YWdlIDMKKyAgICBmb3IgKGludCB1bnNpZ25lZCBpPTA7IGk8NDsgKytpKSBiZWdpbgorICAgICAgICB0eXBlX3NjcjFfc2VhcmNoX29uZV8yX3MgdG1wOworICAgICAgICB0bXAgPSBzY3IxX2xlYWRfemVyb3NfY250XzIoc3RhZ2UyX3ZkWyhpKzEpKjItMS06Ml0pOworICAgICAgICBzdGFnZTNfdmRbaV0gID0gdG1wLnZkOworICAgICAgICBzdGFnZTNfaWR4W2ldID0gKHRtcC5pZHgpID8ge3RtcC5pZHgsIHN0YWdlMl9pZHhbMippXX0gOiB7dG1wLmlkeCwgc3RhZ2UyX2lkeFsyKmkrMV19OworICAgIGVuZAorCisgICAgLy8gU3RhZ2UgNAorICAgIGZvciAoaW50IHVuc2lnbmVkIGk9MDsgaTwyOyArK2kpIGJlZ2luCisgICAgICAgIHR5cGVfc2NyMV9zZWFyY2hfb25lXzJfcyB0bXA7CisgICAgICAgIHRtcCA9IHNjcjFfbGVhZF96ZXJvc19jbnRfMihzdGFnZTNfdmRbKGkrMSkqMi0xLToyXSk7CisgICAgICAgIHN0YWdlNF92ZFtpXSAgPSB0bXAudmQ7CisgICAgICAgIHN0YWdlNF9pZHhbaV0gPSAodG1wLmlkeCkgPyB7dG1wLmlkeCwgc3RhZ2UzX2lkeFsyKmldfSA6IHt0bXAuaWR4LCBzdGFnZTNfaWR4WzIqaSsxXX07CisgICAgZW5kCisKKyAgICAvLyBTdGFnZSA1CisgICAgdG1wLnZkID0gfHN0YWdlNF92ZDsKKyAgICB0bXAuaWR4ID0gKHN0YWdlNF92ZFsxXSkgPyB7MSdiMCwgc3RhZ2U0X2lkeFsxXX0gOiB7MSdiMSwgc3RhZ2U0X2lkeFswXX07CisKKyAgICByZXMgPSB0bXAuaWR4OworCisgICAgcmV0dXJuIHJlczsKK2VuZAorZW5kZnVuY3Rpb24gOiBzY3IxX2xlYWRfemVyb3NfY250XzMyCisKK2BlbmRpZiAvLyBTQ1IxX1NFQVJDSF9NUzFfU1ZICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90YXBjLnN2aCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RhcGMuc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NmVhNDQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90YXBjLnN2aApAQCAtMCwwICsxLDY2IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfdGFwYy5zdmg+CisvLy8gQGJyaWVmICAgICAgVEFQQyBoZWFkZXIgZmlsZQorLy8vCisKK2BpZm5kZWYgU0NSMV9JTkNMVURFX1RBUENfREVGUworYGRlZmluZSBTQ1IxX0lOQ0xVREVfVEFQQ19ERUZTCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorCitgaWZkZWYgU0NSMV9EQkdfRU4KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFBhcmFtZXRlcnMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RBUF9TVEFURV9XSURUSCAgICAgICAgICAgID0gNDsKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRIICAgICAgPSA1OworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIICAgICAgICA9IDMyOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfRFJfQkxEX0lEX1dJRFRIICAgICAgICA9IDMyOworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9UQVBfRFJfQllQQVNTX1dJRFRIICAgICAgICA9IDE7CisvL2xvY2FscGFyYW0gYml0IFtTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEgtMTowXSAgIFNDUjFfVEFQX0lEQ09ERV9SSVNDVl9TQyAgICAgICAgPSBgU0NSMV9UQVBfSURDT0RFOworbG9jYWxwYXJhbSBiaXQgW1NDUjFfVEFQX0RSX0JMRF9JRF9XSURUSC0xOjBdICAgU0NSMV9UQVBfQkxEX0lEX1ZBTFVFICAgICAgICAgICA9IGBTQ1IxX01JTVBJRDsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFR5cGVzCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGxvZ2ljIFtTQ1IxX1RBUF9TVEFURV9XSURUSC0xOjBdIHsKKyAgICBTQ1IxX1RBUF9TVEFURV9SRVNFVCwKKyAgICBTQ1IxX1RBUF9TVEFURV9JRExFLAorICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOLAorICAgIFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkUsCisgICAgU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQsCisgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEsCisgICAgU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0UsCisgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDIsCisgICAgU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFLAorICAgIFNDUjFfVEFQX1NUQVRFX0lSX1NFTF9TQ0FOLAorICAgIFNDUjFfVEFQX1NUQVRFX0lSX0NBUFRVUkUsCisgICAgU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQsCisgICAgU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDEsCisgICAgU0NSMV9UQVBfU1RBVEVfSVJfUEFVU0UsCisgICAgU0NSMV9UQVBfU1RBVEVfSVJfRVhJVDIsCisgICAgU0NSMV9UQVBfU1RBVEVfSVJfVVBEQVRFCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX1RBUF9TVEFURV9YWFggICAgICAgPSAnWAorYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KK30gdHlwZV9zY3IxX3RhcF9zdGF0ZV9lOworCit0eXBlZGVmIGVudW0gbG9naWMgW1NDUjFfVEFQX0lOU1RSVUNUSU9OX1dJRFRIIC0gMTowXSB7CisgICAgU0NSMV9UQVBfSU5TVFJfSURDT0RFICAgICAgICAgICAgPSA1J2gwMSwKKyAgICBTQ1IxX1RBUF9JTlNUUl9CTERfSUQgICAgICAgICAgICA9IDUnaDA0LAorICAgIFNDUjFfVEFQX0lOU1RSX1NDVV9BQ0NFU1MgICAgICAgID0gNSdoMDksCisKKyAgICBTQ1IxX1RBUF9JTlNUUl9EVE1DUyAgICAgICAgICAgICA9IDUnaDEwLAorICAgIFNDUjFfVEFQX0lOU1RSX0RNSV9BQ0NFU1MgICAgICAgID0gNSdoMTEsCisKKyAgICBTQ1IxX1RBUF9JTlNUUl9CWVBBU1MgICAgICAgICAgICA9IDUnaDFGCitgaWZkZWYgU0NSMV9YUFJPUF9FTgorICAgICwKKyAgICBTQ1IxX1RBUF9JTlNUUl9YWFggICAgICAgICAgICAgICA9ICdYCitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorfSB0eXBlX3NjcjFfdGFwX2luc3RyX2U7CisKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9UQVBDX0RFRlMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy9pbmNsdWRlcy9zY3IxX3RkdS5zdmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90ZHUuc3ZoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzgyY2YKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvaW5jbHVkZXMvc2NyMV90ZHUuc3ZoCkBAIC0wLDAgKzEsMTIxIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RkdS5zdmg+CisvLy8gQGJyaWVmICAgICAgVHJpZ2dlciBEZWJ1ZyBNb2R1bGUgaGVhZGVyCisvLy8KKworYGlmbmRlZiBTQ1IxX0lOQ0xVREVfVERVX0RFRlMKK2BkZWZpbmUgU0NSMV9JTkNMVURFX1REVV9ERUZTCisKKy8vYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK2BpZmRlZiBTQ1IxX1REVV9FTgorLy9gaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgorCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKy8vYGluY2x1ZGUgInNjcjFfYXJjaF90eXBlcy5zdmgiCitgaW5jbHVkZSAic2NyMV9jc3Iuc3ZoIgorCitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NVFJJR19OVU0gICAgICAgICAgICAgPSBTQ1IxX1REVV9UUklHX05VTTsKK2BpZmRlZiBTQ1IxX1REVV9JQ09VTlRfRU4KK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0FMTFRSSUdfTlVNICAgICAgICAgICA9IFNDUjFfVERVX01UUklHX05VTSArIDEnYjE7CitgZWxzZQorcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfQUxMVFJJR19OVU0gICAgICAgICAgID0gU0NSMV9URFVfTVRSSUdfTlVNOworYGVuZGlmCisKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0FERFJfVyAgICAgICAgICAgICAgICA9IGBTQ1IxX1hMRU47CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9EQVRBX1cgICAgICAgICAgICAgICAgPSBgU0NSMV9YTEVOOworCisvLyBSZWdpc3RlciBtYXAKK3BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1cgICAgICAgID0gMzsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1RTRUxFQ1QgID0gJ2gwOworcGFyYW1ldGVyIGJpdCBbU0NSMV9DU1JfQUREUl9URFVfT0ZGU19XLTE6MF0gIFNDUjFfQ1NSX0FERFJfVERVX09GRlNfVERBVEExICAgPSAnaDE7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1ctMTowXSAgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTIgICA9ICdoMjsKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfVERVX09GRlNfVy0xOjBdICBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1RJTkZPICAgID0gJ2g0OworCisKK3BhcmFtZXRlciBiaXQgW1NDUjFfQ1NSX0FERFJfV0lEVEgtMTowXSBTQ1IxX0NTUl9BRERSX1REVV9UU0VMRUNUICAgICAgID0gU0NSMV9DU1JfQUREUl9URFVfTUJBU0UgKyBTQ1IxX0NTUl9BRERSX1REVV9PRkZTX1RTRUxFQ1Q7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9URFVfVERBVEExICAgICAgICA9IFNDUjFfQ1NSX0FERFJfVERVX01CQVNFICsgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTE7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9URFVfVERBVEEyICAgICAgICA9IFNDUjFfQ1NSX0FERFJfVERVX01CQVNFICsgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19UREFUQTI7CitwYXJhbWV0ZXIgYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9DU1JfQUREUl9URFVfVElORk8gICAgICAgICA9IFNDUjFfQ1NSX0FERFJfVERVX01CQVNFICsgU0NSMV9DU1JfQUREUl9URFVfT0ZGU19USU5GTzsKKworLy8gVERBVEExCitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9UREFUQTFfVFlQRV9ISSAgICAgICAgPSBgU0NSMV9YTEVOLTE7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9UREFUQTFfVFlQRV9MTyAgICAgICAgPSBgU0NSMV9YTEVOLTQ7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9UREFUQTFfRE1PREUgICAgICAgICAgPSBgU0NSMV9YTEVOLTU7CisKKy8vIFREQVRBMTogY29uc3RhbnQgYml0cyB2YWx1ZXMKK3BhcmFtZXRlciBiaXQgICAgICAgICAgIFNDUjFfVERVX1REQVRBMV9ETU9ERV9WQUwgICAgICA9IDEnYjA7CisKKy8vIE1DT05UUk9MOiBiaXRzIG51bWJlcgorcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9ISSAgID0gYFNDUjFfWExFTi02OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTUFTS01BWF9MTyAgID0gYFNDUjFfWExFTi0xMTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQl9ISSA9IGBTQ1IxX1hMRU4tMTI7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREJfTE8gPSAyMTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0hJVCAgICAgICAgICA9IDIwOworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfU0VMRUNUICAgICAgID0gMTk7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9USU1JTkcgICAgICAgPSAxODsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0FDVElPTl9ISSAgICA9IDE3OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfQUNUSU9OX0xPICAgID0gMTI7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9DSEFJTiAgICAgICAgPSAxMTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX01BVENIX0hJICAgICA9IDEwOworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfTUFUQ0hfTE8gICAgID0gNzsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX00gICAgICAgICAgICA9IDY7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9SRVNFUlZFREEgICAgPSA1OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfUyAgICAgICAgICAgID0gNDsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX1UgICAgICAgICAgICA9IDM7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9NQ09OVFJPTF9FWEVDVVRFICAgICAgPSAyOworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfTUNPTlRST0xfU1RPUkUgICAgICAgID0gMTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX01DT05UUk9MX0xPQUQgICAgICAgICA9IDA7CisKKy8vIE1DT05UUk9MOiBjb25zdGFudCBiaXRzIHZhbHVlcworcGFyYW1ldGVyIGJpdCBbU0NSMV9URFVfVERBVEExX1RZUEVfSEktU0NSMV9URFVfVERBVEExX1RZUEVfTE86MF0KKyAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX1RZUEVfVkFMICAgICAgICAgICA9IDInZDI7CisKK3BhcmFtZXRlciBiaXQgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX1NFTEVDVF9WQUwgICAgICAgICA9IDEnYjA7CitwYXJhbWV0ZXIgYml0ICAgICAgICAgICBTQ1IxX1REVV9NQ09OVFJPTF9USU1JTkdfVkFMICAgICAgICAgPSAxJ2IwOworCitwYXJhbWV0ZXIgYml0IFtTQ1IxX1REVV9NQ09OVFJPTF9NQVNLTUFYX0hJLVNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfTE86MF0KKyAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX01BU0tNQVhfVkFMICAgICAgICA9IDEnYjA7CisKK3BhcmFtZXRlciBiaXQgICAgICAgICAgIFNDUjFfVERVX01DT05UUk9MX1JFU0VSVkVEQV9WQUwgICAgICA9IDEnYjA7CisKKy8vIElDT1VOVDogYml0cyBudW1iZXIKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9ETU9ERSAgICAgICAgICA9IGBTQ1IxX1hMRU4tNTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREJfSEkgICA9IGBTQ1IxX1hMRU4tNjsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREJfTE8gICA9IDI1OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX0hJVCAgICAgICAgICAgID0gMjQ7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfQ09VTlRfSEkgICAgICAgPSAyMzsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9DT1VOVF9MTyAgICAgICA9IDEwOworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX00gICAgICAgICAgICAgID0gOTsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9SRVNFUlZFREEgICAgICA9IDg7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfUyAgICAgICAgICAgICAgPSA3OworcGFyYW1ldGVyIGludCB1bnNpZ25lZCAgU0NSMV9URFVfSUNPVU5UX1UgICAgICAgICAgICAgID0gNjsKK3BhcmFtZXRlciBpbnQgdW5zaWduZWQgIFNDUjFfVERVX0lDT1VOVF9BQ1RJT05fSEkgICAgICA9IDU7CitwYXJhbWV0ZXIgaW50IHVuc2lnbmVkICBTQ1IxX1REVV9JQ09VTlRfQUNUSU9OX0xPICAgICAgPSAwOworCisvLyBJQ09VTlQ6IGNvbnN0YW50IGJpdHMgdmFsdWVzCitwYXJhbWV0ZXIgYml0IFtTQ1IxX1REVV9UREFUQTFfVFlQRV9ISS1TQ1IxX1REVV9UREFUQTFfVFlQRV9MTzowXQorICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9URFVfSUNPVU5UX1RZUEVfVkFMICAgICAgICAgICAgID0gMidkMzsKKworcGFyYW1ldGVyIGJpdCBbU0NSMV9URFVfSUNPVU5UX1JFU0VSVkVEQl9ISS1TQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURCX0xPOjBdCisgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURCX1ZBTCAgICAgICAgPSAxJ2IwOworCitwYXJhbWV0ZXIgYml0ICAgICAgICAgICBTQ1IxX1REVV9JQ09VTlRfUkVTRVJWRURBX1ZBTCAgICAgICAgPSAxJ2IwOworCisvLyBDUFUgcGlwZWxpbmUgbW9uaXRvcnMKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmQ7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxOworICAgIGxvZ2ljIFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHI7Cit9IHR5cGVfc2NyMV9icmttX2luc3RyX21vbl9zOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU7CisgICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcjsKK30gdHlwZV9zY3IxX2Jya21fbHN1X21vbl9zOworCitgZW5kaWYgLy8gU0NSMV9URFVfRU4KKworYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9URFVfREVGUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fYWhiLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fYWhiLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNDEzZDUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9haGIuc3YKQEAgLTAsMCArMSw0NjYgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfZG1lbV9haGIuc3Y+CisvLy8gQGJyaWVmICAgICAgRGF0YSBtZW1vcnkgQUhCIGJyaWRnZQorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FoYi5zdmgiCitgaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCisKK21vZHVsZSBzY3IxX2RtZW1fYWhiICgKKyAgICAvLyBDb250cm9sIFNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKKworICAgIC8vIENvcmUgSW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX2FjaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIGRtZW1fY21kLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBkbWVtX3dpZHRoLAorICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX2FkZHIsCisgICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGRtZW1fd2RhdGEsCisgICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGRtZW1fcmRhdGEsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGRtZW1fcmVzcCwKKworICAgIC8vIEFIQiBJbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljICAgWzM6MF0gICAgICAgICAgICAgICAgICAgaHByb3QsCisgICAgb3V0cHV0ICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGhidXJzdCwKKyAgICBvdXRwdXQgIGxvZ2ljICAgWzI6MF0gICAgICAgICAgICAgICAgICAgaHNpemUsCisgICAgb3V0cHV0ICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGh0cmFucywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaG1hc3Rsb2NrLAorICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBoYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdyaXRlLAorICAgIG91dHB1dCAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBod2RhdGEsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWFkeSwKKyAgICBpbnB1dCAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHJkYXRhLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVzcAorCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIFBhcmFtZXRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGlmbmRlZiBTQ1IxX0RNRU1fQUhCX09VVF9CUAorbG9jYWxwYXJhbSAgU0NSMV9GSUZPX1dJRFRIID0gMjsKK2xvY2FscGFyYW0gIFNDUjFfRklGT19DTlRfV0lEVEggPSAkY2xvZzIoU0NSMV9GSUZPX1dJRFRIKzEpOworYGVuZGlmIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdHlwZSBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIGVudW0gbG9naWMgeworICAgIFNDUjFfRlNNX0FERFIgPSAxJ2IwLAorICAgIFNDUjFfRlNNX0RBVEEgPSAxJ2IxLAorICAgIFNDUjFfRlNNX0VSUiAgPSAxJ2J4Cit9IHR5cGVfc2NyMV9mc21fZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZTsKKyAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKKyAgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhhZGRyOworICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHdkYXRhOworfSB0eXBlX3NjcjFfcmVxX2ZpZm9fczsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3cml0ZTsKKyAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKKyAgICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGhhZGRyOworICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHdkYXRhOworfSB0eXBlX3NjcjFfZGF0YV9maWZvX3M7CisKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVzcDsKKyAgICBsb2dpYyAgIFsyOjBdICAgICAgICAgICAgICAgICAgIGh3aWR0aDsKKyAgICBsb2dpYyAgIFsxOjBdICAgICAgICAgICAgICAgICAgIGhhZGRyOworICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaHJkYXRhOworfSB0eXBlX3NjcjFfcmVzcF9maWZvX3M7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgZnVuY3Rpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Z1bmN0aW9uIGF1dG9tYXRpYyBsb2dpYyAgIFsyOjBdIHNjcjFfY29udl9tZW0yYWhiX3dpZHRoICgKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICBkbWVtX3dpZHRoCispOworICAgIGxvZ2ljICAgWzI6MF0gICB0bXA7CitiZWdpbgorICAgIGNhc2UgKGRtZW1fd2lkdGgpCisgICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiBiZWdpbgorICAgICAgICAgICAgdG1wID0gU0NSMV9IU0laRV84QjsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEIDogYmVnaW4KKyAgICAgICAgICAgIHRtcCA9IFNDUjFfSFNJWkVfMTZCOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6IGJlZ2luCisgICAgICAgICAgICB0bXAgPSBTQ1IxX0hTSVpFXzMyQjsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgdG1wID0gU0NSMV9IU0laRV9FUlI7CisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKKyAgICByZXR1cm4gdG1wOworZW5kCitlbmRmdW5jdGlvbiA6IHNjcjFfY29udl9tZW0yYWhiX3dpZHRoCisKK2Z1bmN0aW9uIGF1dG9tYXRpYyBsb2dpY1tTQ1IxX0FIQl9XSURUSC0xOjBdIHNjcjFfY29udl9tZW0yYWhiX3dkYXRhICgKKyAgICBpbnB1dCAgIGxvZ2ljICAgWzE6MF0gICAgICAgICAgICAgICAgICAgZG1lbV9hZGRyLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBkbWVtX3dpZHRoLAorICAgIGlucHV0ICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBkbWVtX3dkYXRhCispOworICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gIHRtcDsKK2JlZ2luCisgICAgdG1wID0gJ3g7CisgICAgY2FzZSAoZG1lbV93aWR0aCkKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6IGJlZ2luCisgICAgICAgICAgICBjYXNlIChkbWVtX2FkZHIpCisgICAgICAgICAgICAgICAgMidiMDAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICB0bXBbNzowXSAgID0gZG1lbV93ZGF0YVs3OjBdOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIDInYjAxIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdG1wWzE1OjhdICA9IGRtZW1fd2RhdGFbNzowXTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAyJ2IxMCA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHRtcFsyMzoxNl0gPSBkbWVtX3dkYXRhWzc6MF07CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgMidiMTEgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICB0bXBbMzE6MjRdID0gZG1lbV93ZGF0YVs3OjBdOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgorICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyWzFdKQorICAgICAgICAgICAgICAgIDEnYjAgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICB0bXBbMTU6MF0gID0gZG1lbV93ZGF0YVsxNTowXTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAxJ2IxIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdG1wWzMxOjE2XSA9IGRtZW1fd2RhdGFbMTU6MF07CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogYmVnaW4KKyAgICAgICAgICAgIHRtcCA9IGRtZW1fd2RhdGE7CisgICAgICAgIGVuZAorICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorICAgIHJldHVybiB0bXA7CitlbmQKK2VuZGZ1bmN0aW9uIDogc2NyMV9jb252X21lbTJhaGJfd2RhdGEKKworZnVuY3Rpb24gYXV0b21hdGljIGxvZ2ljW1NDUjFfQUhCX1dJRFRILTE6MF0gc2NyMV9jb252X2FoYjJtZW1fcmRhdGEgKAorICAgIGlucHV0ICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgIGh3aWR0aCwKKyAgICBpbnB1dCAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICBoYWRkciwKKyAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICBocmRhdGEKKyk7CisgICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgdG1wOworYmVnaW4KKyAgICB0bXAgPSAneDsKKyAgICBjYXNlIChod2lkdGgpCisgICAgICAgIFNDUjFfSFNJWkVfOEIgOiBiZWdpbgorICAgICAgICAgICAgY2FzZSAoaGFkZHIpCisgICAgICAgICAgICAgICAgMidiMDAgOiB0bXBbNzowXSA9IGhyZGF0YVs3OjBdOworICAgICAgICAgICAgICAgIDInYjAxIDogdG1wWzc6MF0gPSBocmRhdGFbMTU6OF07CisgICAgICAgICAgICAgICAgMidiMTAgOiB0bXBbNzowXSA9IGhyZGF0YVsyMzoxNl07CisgICAgICAgICAgICAgICAgMidiMTEgOiB0bXBbNzowXSA9IGhyZGF0YVszMToyNF07CisgICAgICAgICAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0hTSVpFXzE2QiA6IGJlZ2luCisgICAgICAgICAgICBjYXNlIChoYWRkclsxXSkKKyAgICAgICAgICAgICAgICAxJ2IwIDogdG1wWzE1OjBdID0gaHJkYXRhWzE1OjBdOworICAgICAgICAgICAgICAgIDEnYjEgOiB0bXBbMTU6MF0gPSBocmRhdGFbMzE6MTZdOworICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9IU0laRV8zMkIgOiBiZWdpbgorICAgICAgICAgICAgdG1wID0gaHJkYXRhOworICAgICAgICBlbmQKKyAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKKyAgICByZXR1cm4gdG1wOworZW5kCitlbmRmdW5jdGlvbiA6IHNjcjFfY29udl9haGIybWVtX3JkYXRhCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVfc2NyMV9mc21fZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNtOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb19yZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fd3I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3VwOworYGlmZGVmIFNDUjFfRE1FTV9BSEJfT1VUX0JQCit0eXBlX3NjcjFfcmVxX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX25ldzsKK3R5cGVfc2NyMV9yZXFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fcjsKK3R5cGVfc2NyMV9yZXFfZmlmb19zIFswOjBdICAgICAgICAgICAgICAgICAgcmVxX2ZpZm87CitgZWxzZSAvLyBTQ1IxX0RNRU1fQUhCX09VVF9CUAordHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6U0NSMV9GSUZPX1dJRFRILTFdICByZXFfZmlmbzsKK3R5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm9fbmV3OworbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnQ7Citsb2dpYyAgICAgICBbU0NSMV9GSUZPX0NOVF9XSURUSC0xOjBdICAgICAgIHJlcV9maWZvX2NudF9uZXc7CitgZW5kaWYgLy8gU0NSMV9ETUVNX0FIQl9PVVRfQlAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZW1wdHk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2Z1bGw7CisKK3R5cGVfc2NyMV9kYXRhX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9maWZvOwordHlwZV9zY3IxX3Jlc3BfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm87Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BfZmlmb19ocmVhZHk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJmYWNlIHRvIENvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGRtZW1fcmVxX2FjayA9IH5yZXFfZmlmb19mdWxsOworYXNzaWduIHJlcV9maWZvX3dyICA9IH5yZXFfZmlmb19mdWxsICYgZG1lbV9yZXE7CisKK2Fzc2lnbiBkbWVtX3JkYXRhID0gc2NyMV9jb252X2FoYjJtZW1fcmRhdGEocmVzcF9maWZvLmh3aWR0aCwgcmVzcF9maWZvLmhhZGRyLCByZXNwX2ZpZm8uaHJkYXRhKTsKKworYXNzaWduIGRtZW1fcmVzcCA9IChyZXNwX2ZpZm9faHJlYWR5KQorICAgICAgICAgICAgICAgICAgICA/IChyZXNwX2ZpZm8uaHJlc3AgPT0gU0NSMV9IUkVTUF9PS0FZKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBTQ1IxX01FTV9SRVNQX1JEWV9PSworICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX1JEWV9FUgorICAgICAgICAgICAgICAgICAgICA6IFNDUjFfTUVNX1JFU1BfTk9UUkRZIDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSRVFfRklGTworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgaWZkZWYgU0NSMV9ETUVNX0FIQl9PVVRfQlAKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAofnJlcV9maWZvX2Z1bGwpIGJlZ2luCisgICAgICAgICAgICByZXFfZmlmb19mdWxsIDw9IGRtZW1fcmVxICYgfnJlcV9maWZvX3JkOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSB+cmVxX2ZpZm9fcmQ7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCithc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHJlcV9maWZvX2Z1bGwgfCBkbWVtX3JlcSk7CisKK2Fzc2lnbiByZXFfZmlmb191cCA9IH5yZXFfZmlmb19yZCAmIHJlcV9maWZvX3dyOworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgorICAgICAgICByZXFfZmlmb19yIDw9IHJlcV9maWZvX25ldzsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gcmVxX2ZpZm9fbmV3Lmh3cml0ZSA9IGRtZW1fcmVxID8gKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikgICAgICAgOiAxJ2IwOworYXNzaWduIHJlcV9maWZvX25ldy5od2lkdGggPSBkbWVtX3JlcSA/IHNjcjFfY29udl9tZW0yYWhiX3dpZHRoKGRtZW1fd2lkdGgpIDogJzA7Cithc3NpZ24gcmVxX2ZpZm9fbmV3LmhhZGRyICA9IGRtZW1fcmVxID8gZG1lbV9hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMDsKK2Fzc2lnbiByZXFfZmlmb19uZXcuaHdkYXRhID0gKGRtZW1fcmVxICYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2NyMV9jb252X21lbTJhaGJfd2RhdGEoZG1lbV9hZGRyWzE6MF0sIGRtZW1fd2lkdGgsIGRtZW1fd2RhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzA7Cithc3NpZ24gcmVxX2ZpZm9bMF0gPSAocmVxX2ZpZm9fZnVsbCkgPyByZXFfZmlmb19yOiByZXFfZmlmb19uZXc7CisKK2BlbHNlIC8vIFNDUjFfRE1FTV9BSEJfT1VUX0JQCithbHdheXNfY29tYiBiZWdpbgorICAgIHJlcV9maWZvX3VwICAgICAgPSAxJ2IwOworICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQ7CisgICAgcmVxX2ZpZm9fbmV3ICAgICA9IHJlcV9maWZvOworICAgIGNhc2UgKHtyZXFfZmlmb19yZCwgcmVxX2ZpZm9fd3J9KQorICAgICAgICAyJ2IwMCA6IGJlZ2luCisgICAgICAgICAgICAvLyBub3RoaW5nIHRvZG8KKyAgICAgICAgZW5kCisgICAgICAgIDInYjAxOiBiZWdpbgorICAgICAgICAgICAgLy8gRklGTyB3cml0ZQorICAgICAgICAgICAgcmVxX2ZpZm9fdXAgPSAxJ2IxOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3W3JlcV9maWZvX2NudF0uaHdyaXRlID0gKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9XUik7CisgICAgICAgICAgICByZXFfZmlmb19uZXdbcmVxX2ZpZm9fY250XS5od2lkdGggPSBzY3IxX2NvbnZfbWVtMmFoYl93aWR0aChkbWVtX3dpZHRoKTsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmhhZGRyICA9IGRtZW1fYWRkcjsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmh3ZGF0YSA9IHNjcjFfY29udl9tZW0yYWhiX3dkYXRhKGRtZW1fYWRkclsxOjBdLCBkbWVtX3dpZHRoLCBkbWVtX3dkYXRhKTsKKyAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQgKyAxJ2IxOworICAgICAgICBlbmQKKyAgICAgICAgMidiMTAgOiBiZWdpbgorICAgICAgICAgICAgLy8gRklGTyByZWFkCisgICAgICAgICAgICByZXFfZmlmb191cCA9IDEnYjE7CisgICAgICAgICAgICByZXFfZmlmb19uZXdbMF0gPSByZXFfZmlmb19uZXdbMV07CisgICAgICAgICAgICByZXFfZmlmb19uZXdbMV0uaHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1sxXS5od2lkdGggPSBTQ1IxX0hTSVpFXzMyQjsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1sxXS5oYWRkciAgPSAneDsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1sxXS5od2RhdGEgPSAneDsKKyAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQgLSAxJ2IxOworICAgICAgICBlbmQKKyAgICAgICAgMidiMTEgOiBiZWdpbgorICAgICAgICAgICAgLy8gUmVhZCBhbmQgV3JpdGUgRklGTy4gSXQgaXMgcG9zc2libGUgb25seSB3aGVuIGZpZm9fY250ID0gMQorICAgICAgICAgICAgcmVxX2ZpZm9fdXAgPSAxJ2IxOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmh3cml0ZSA9IChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmh3aWR0aCA9IHNjcjFfY29udl9tZW0yYWhiX3dpZHRoKGRtZW1fd2lkdGgpOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmhhZGRyICA9IGRtZW1fYWRkcjsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1swXS5od2RhdGEgPSBzY3IxX2NvbnZfbWVtMmFoYl93ZGF0YShkbWVtX2FkZHJbMTowXSwgZG1lbV93aWR0aCwgZG1lbV93ZGF0YSk7CisgICAgICAgIGVuZAorICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgIHJlcV9maWZvX3VwICAgICAgPSAneDsKKyAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSAneDsKKyAgICAgICAgICAgIHJlcV9maWZvX25ldyAgICAgPSAneDsKKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHJlcV9maWZvX2NudCA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAocmVxX2ZpZm9fdXApIGJlZ2luCisgICAgICAgICAgICByZXFfZmlmb19jbnQgPD0gcmVxX2ZpZm9fY250X25ldzsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKK2Fzc2lnbiByZXFfZmlmb19mdWxsICA9IChyZXFfZmlmb19jbnQgPT0gU0NSMV9GSUZPX1dJRFRIKTsKK2Fzc2lnbiByZXFfZmlmb19lbXB0eSA9IH4ofHJlcV9maWZvX2NudCk7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChyZXFfZmlmb191cCkgYmVnaW4KKyAgICAgICAgcmVxX2ZpZm8gPD0gcmVxX2ZpZm9fbmV3OworICAgIGVuZAorZW5kCitgZW5kaWYgLy8gU0NSMV9ETUVNX0FIQl9PVVRfQlAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRlNNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNhc2UgKGZzbSkKKyAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGZzbSA8PSAocmVxX2ZpZm9fZW1wdHkpID8gU0NSMV9GU01fQUREUiA6IFNDUjFfRlNNX0RBVEE7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gKHJlcV9maWZvX2VtcHR5KSA/IFNDUjFfRlNNX0FERFIgOiBTQ1IxX0ZTTV9EQVRBOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fRVJSOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIHJlcV9maWZvX3JkID0gMSdiMDsKKyAgICBjYXNlIChmc20pCisgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgorICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCisgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgorICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkID0gfnJlcV9maWZvX2VtcHR5ICYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSAxJ2J4OworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGSUZPIGRhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgY2FzZSAoZnNtKQorICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KKyAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCisgICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3cml0ZSA8PSByZXFfZmlmb1swXS5od3JpdGU7CisgICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3aWR0aCA8PSByZXFfZmlmb1swXS5od2lkdGg7CisgICAgICAgICAgICAgICAgZGF0YV9maWZvLmhhZGRyICA8PSByZXFfZmlmb1swXS5oYWRkclsxOjBdOworICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od2RhdGEgPD0gcmVxX2ZpZm9bMF0uaHdkYXRhOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZmlmby5od3JpdGUgPD0gcmVxX2ZpZm9bMF0uaHdyaXRlOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9maWZvLmh3aWR0aCA8PSByZXFfZmlmb1swXS5od2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaGFkZHIgIDw9IHJlcV9maWZvWzBdLmhhZGRyWzE6MF07CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2ZpZm8uaHdkYXRhIDw9IHJlcV9maWZvWzBdLmh3ZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGSUZPIHJlc3BvbnNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX0RNRU1fQUhCX0lOX0JQCithc3NpZ24gcmVzcF9maWZvX2hyZWFkeSA9IChmc20gPT0gU0NSMV9GU01fREFUQSkgPyBocmVhZHkgOiAxJ2IwOworYXNzaWduIHJlc3BfZmlmby5ocmVzcCAgPSBocmVzcDsKK2Fzc2lnbiByZXNwX2ZpZm8uaHdpZHRoID0gZGF0YV9maWZvLmh3aWR0aDsKK2Fzc2lnbiByZXNwX2ZpZm8uaGFkZHIgID0gZGF0YV9maWZvLmhhZGRyOworYXNzaWduIHJlc3BfZmlmby5ocmRhdGEgPSBocmRhdGE7CitgZWxzZSAvLyBTQ1IxX0RNRU1fQUhCX0lOX0JQCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICByZXNwX2ZpZm9faHJlYWR5IDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgcmVzcF9maWZvX2hyZWFkeSA8PSAoZnNtID09IFNDUjFfRlNNX0RBVEEpID8gaHJlYWR5IDogMSdiMDsKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAoaHJlYWR5ICYgKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSkgYmVnaW4KKyAgICAgICAgcmVzcF9maWZvLmhyZXNwICA8PSBocmVzcDsKKyAgICAgICAgcmVzcF9maWZvLmh3aWR0aCA8PSBkYXRhX2ZpZm8uaHdpZHRoOworICAgICAgICByZXNwX2ZpZm8uaGFkZHIgIDw9IGRhdGFfZmlmby5oYWRkcjsKKyAgICAgICAgcmVzcF9maWZvLmhyZGF0YSA8PSBocmRhdGE7CisgICAgZW5kCitlbmQKK2BlbmRpZiAvLyBTQ1IxX0RNRU1fQUhCX0lOX0JQCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJmYWNlIHRvIEFIQgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9EQVRBXSAgPSAxJ2IxOworYXNzaWduIGhwcm90W1NDUjFfSFBST1RfUFJWXSAgID0gMSdiMDsKK2Fzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX0JVRl0gICA9IDEnYjA7Cithc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9DQUNIRV0gPSAxJ2IwOworCithc3NpZ24gaGJ1cnN0ICAgICAgID0gU0NSMV9IQlVSU1RfU0lOR0xFOworYXNzaWduIGhzaXplICAgICAgICA9IHJlcV9maWZvWzBdLmh3aWR0aDsKK2Fzc2lnbiBobWFzdGxvY2sgICAgPSAxJ2IwOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX0lETEU7CisgICAgY2FzZSAoZnNtKQorICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KKyAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCisgICAgICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfTk9OU0VROworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX05PTlNFUTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfRVJSOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIGhhZGRyICA9IHJlcV9maWZvWzBdLmhhZGRyOworYXNzaWduIGh3cml0ZSA9IHJlcV9maWZvWzBdLmh3cml0ZTsKK2Fzc2lnbiBod2RhdGEgPSBkYXRhX2ZpZm8uaHdkYXRhOworCitlbmRtb2R1bGUgOiBzY3IxX2RtZW1fYWhiCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlZjcyOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdgpAQCAtMCwwICsxLDI3OCBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9kbWVtX3JvdXRlci5zdj4KKy8vLyBAYnJpZWYgICAgICBEYXRhIG1lbW9yeSByb3V0ZXIKKy8vLworYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK21vZHVsZSBzY3IxX2RtZW1fcm91dGVyCisjKAorICAgIHBhcmFtZXRlciBTQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgID0gYFNDUjFfRE1FTV9BV0lEVEgnaEZGRkYwMDAwLAorICAgIHBhcmFtZXRlciBTQ1IxX1BPUlQxX0FERFJfUEFUVEVSTiAgID0gYFNDUjFfRE1FTV9BV0lEVEgnaDAwMDEwMDAwLAorICAgIHBhcmFtZXRlciBTQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgID0gYFNDUjFfRE1FTV9BV0lEVEgnaEZGRkYwMDAwLAorICAgIHBhcmFtZXRlciBTQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgID0gYFNDUjFfRE1FTV9BV0lEVEgnaDAwMDIwMDAwCispCisoCisgICAgLy8gQ29udHJvbCBzaWduYWxzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCisKKyAgICAvLyBDb3JlIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBkbWVtX2NtZCwKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgZG1lbV93aWR0aCwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgZG1lbV9hZGRyLAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBkbWVtX3dkYXRhLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBkbWVtX3JkYXRhLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICBkbWVtX3Jlc3AsCisKKyAgICAvLyBQT1JUMCBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDBfcmVxX2FjaywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDBfcmVxLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBwb3J0MF9jbWQsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgIHBvcnQwX3dpZHRoLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBwb3J0MF9hZGRyLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0MF93ZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDBfcmRhdGEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHBvcnQwX3Jlc3AsCisKKyAgICAvLyBQT1JUMSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDFfcmVxX2FjaywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDFfcmVxLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBwb3J0MV9jbWQsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgIHBvcnQxX3dpZHRoLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBwb3J0MV9hZGRyLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0MV93ZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDFfcmRhdGEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHBvcnQxX3Jlc3AsCisKKyAgICAvLyBQT1JUMiBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDJfcmVxX2FjaywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDJfcmVxLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBwb3J0Ml9jbWQsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgIHBvcnQyX3dpZHRoLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBwb3J0Ml9hZGRyLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBwb3J0Ml93ZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgcG9ydDJfcmRhdGEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHBvcnQyX3Jlc3AKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdHlwZXMgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBlbnVtIGxvZ2ljIHsKKyAgICBTQ1IxX0ZTTV9BRERSLAorICAgIFNDUjFfRlNNX0RBVEEKK30gdHlwZV9zY3IxX2ZzbV9lOworCit0eXBlZGVmIGVudW0gbG9naWMgWzE6MF0geworICAgIFNDUjFfU0VMX1BPUlQwLAorICAgIFNDUjFfU0VMX1BPUlQxLAorICAgIFNDUjFfU0VMX1BPUlQyCit9IHR5cGVfc2NyMV9zZWxfZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICBmc207Cit0eXBlX3NjcjFfc2VsX2UgICAgICAgICAgICAgICAgIHBvcnRfc2VsOwordHlwZV9zY3IxX3NlbF9lICAgICAgICAgICAgICAgICBwb3J0X3NlbF9yOworbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBzZWxfcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHNlbF9yZXNwOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxfcmVxX2FjazsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBwb3J0X3NlbCAgICA9IFNDUjFfU0VMX1BPUlQwOworICAgIGlmICgoZG1lbV9hZGRyICYgU0NSMV9QT1JUMV9BRERSX01BU0spID09IFNDUjFfUE9SVDFfQUREUl9QQVRURVJOKSBiZWdpbgorICAgICAgICBwb3J0X3NlbCAgICA9IFNDUjFfU0VMX1BPUlQxOworICAgIGVuZCBlbHNlIGlmICgoZG1lbV9hZGRyICYgU0NSMV9QT1JUMl9BRERSX01BU0spID09IFNDUjFfUE9SVDJfQUREUl9QQVRURVJOKSBiZWdpbgorICAgICAgICBwb3J0X3NlbCAgICA9IFNDUjFfU0VMX1BPUlQyOworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGZzbSAgICAgICAgIDw9IFNDUjFfRlNNX0FERFI7CisgICAgICAgIHBvcnRfc2VsX3IgIDw9IFNDUjFfU0VMX1BPUlQwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNhc2UgKGZzbSkKKyAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChkbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBmc20gICAgICAgICA8PSBTQ1IxX0ZTTV9EQVRBOworICAgICAgICAgICAgICAgICAgICBwb3J0X3NlbF9yICA8PSBwb3J0X3NlbDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCisgICAgICAgICAgICAgICAgY2FzZSAoc2VsX3Jlc3ApCisgICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX09LIDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbWVtX3JlcSAmIHNlbF9yZXFfYWNrKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSAgICAgICAgIDw9IFNDUjFfRlNNX0RBVEE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9zZWxfciAgPD0gcG9ydF9zZWw7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9FUiA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGlmICgoZnNtID09IFNDUjFfRlNNX0FERFIpIHwgKChmc20gPT0gU0NSMV9GU01fREFUQSkgJiAoc2VsX3Jlc3AgPT0gU0NSMV9NRU1fUkVTUF9SRFlfT0spKSkgYmVnaW4KKyAgICAgICAgY2FzZSAocG9ydF9zZWwpCisgICAgICAgICAgICBTQ1IxX1NFTF9QT1JUMCAgOiBzZWxfcmVxX2FjayAgID0gcG9ydDBfcmVxX2FjazsKKyAgICAgICAgICAgIFNDUjFfU0VMX1BPUlQxICA6IHNlbF9yZXFfYWNrICAgPSBwb3J0MV9yZXFfYWNrOworICAgICAgICAgICAgU0NSMV9TRUxfUE9SVDIgIDogc2VsX3JlcV9hY2sgICA9IHBvcnQyX3JlcV9hY2s7CisgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBzZWxfcmVxX2FjayAgID0gMSdiMDsKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHNlbF9yZXFfYWNrID0gMSdiMDsKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIGNhc2UgKHBvcnRfc2VsX3IpCisgICAgICAgIFNDUjFfU0VMX1BPUlQwICA6IGJlZ2luCisgICAgICAgICAgICBzZWxfcmRhdGEgICA9IHBvcnQwX3JkYXRhOworICAgICAgICAgICAgc2VsX3Jlc3AgICAgPSBwb3J0MF9yZXNwOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9TRUxfUE9SVDEgIDogYmVnaW4KKyAgICAgICAgICAgIHNlbF9yZGF0YSAgID0gcG9ydDFfcmRhdGE7CisgICAgICAgICAgICBzZWxfcmVzcCAgICA9IHBvcnQxX3Jlc3A7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX1NFTF9QT1JUMiAgOiBiZWdpbgorICAgICAgICAgICAgc2VsX3JkYXRhICAgPSBwb3J0Ml9yZGF0YTsKKyAgICAgICAgICAgIHNlbF9yZXNwICAgID0gcG9ydDJfcmVzcDsKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgICAgICAgICA6IGJlZ2luCisgICAgICAgICAgICBzZWxfcmRhdGEgICA9ICcwOworICAgICAgICAgICAgc2VsX3Jlc3AgICAgPSBTQ1IxX01FTV9SRVNQX1JEWV9FUjsKKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJmYWNlIHRvIGNvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGRtZW1fcmVxX2FjayA9IHNlbF9yZXFfYWNrOworYXNzaWduIGRtZW1fcmRhdGEgICA9IHNlbF9yZGF0YTsKK2Fzc2lnbiBkbWVtX3Jlc3AgICAgPSBzZWxfcmVzcDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gUE9SVDAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBwb3J0MF9yZXEgPSAxJ2IwOworICAgIGNhc2UgKGZzbSkKKyAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCisgICAgICAgICAgICBwb3J0MF9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCk7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChzZWxfcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgYmVnaW4KKyAgICAgICAgICAgICAgICBwb3J0MF9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYGlmZGVmIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0MF9jbWQgICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApID8gZG1lbV9jbWQgICA6IFNDUjFfTUVNX0NNRF9FUlJPUjsKK2Fzc2lnbiBwb3J0MF93aWR0aCAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDApID8gZG1lbV93aWR0aCA6IFNDUjFfTUVNX1dJRFRIX0VSUk9SOworYXNzaWduIHBvcnQwX2FkZHIgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMCkgPyBkbWVtX2FkZHIgIDogJ3g7Cithc3NpZ24gcG9ydDBfd2RhdGEgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQwKSA/IGRtZW1fd2RhdGEgOiAneDsKK2BlbHNlIC8vIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0MF9jbWQgICAgPSBkbWVtX2NtZCAgOworYXNzaWduIHBvcnQwX3dpZHRoICA9IGRtZW1fd2lkdGg7Cithc3NpZ24gcG9ydDBfYWRkciAgID0gZG1lbV9hZGRyIDsKK2Fzc2lnbiBwb3J0MF93ZGF0YSAgPSBkbWVtX3dkYXRhOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gUE9SVDEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBwb3J0MV9yZXEgPSAxJ2IwOworICAgIGNhc2UgKGZzbSkKKyAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCisgICAgICAgICAgICBwb3J0MV9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSk7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChzZWxfcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgYmVnaW4KKyAgICAgICAgICAgICAgICBwb3J0MV9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYGlmZGVmIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0MV9jbWQgICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpID8gZG1lbV9jbWQgICA6IFNDUjFfTUVNX0NNRF9FUlJPUjsKK2Fzc2lnbiBwb3J0MV93aWR0aCAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDEpID8gZG1lbV93aWR0aCA6IFNDUjFfTUVNX1dJRFRIX0VSUk9SOworYXNzaWduIHBvcnQxX2FkZHIgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMSkgPyBkbWVtX2FkZHIgIDogJ3g7Cithc3NpZ24gcG9ydDFfd2RhdGEgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQxKSA/IGRtZW1fd2RhdGEgOiAneDsKK2BlbHNlIC8vIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0MV9jbWQgICAgPSBkbWVtX2NtZCAgOworYXNzaWduIHBvcnQxX3dpZHRoICA9IGRtZW1fd2lkdGg7Cithc3NpZ24gcG9ydDFfYWRkciAgID0gZG1lbV9hZGRyIDsKK2Fzc2lnbiBwb3J0MV93ZGF0YSAgPSBkbWVtX3dkYXRhOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gUE9SVDIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBwb3J0Ml9yZXEgPSAxJ2IwOworICAgIGNhc2UgKGZzbSkKKyAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCisgICAgICAgICAgICBwb3J0Ml9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMik7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChzZWxfcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgYmVnaW4KKyAgICAgICAgICAgICAgICBwb3J0Ml9yZXEgPSBkbWVtX3JlcSAmIChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMik7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYGlmZGVmIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0Ml9jbWQgICAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpID8gZG1lbV9jbWQgICA6IFNDUjFfTUVNX0NNRF9FUlJPUjsKK2Fzc2lnbiBwb3J0Ml93aWR0aCAgPSAocG9ydF9zZWwgPT0gU0NSMV9TRUxfUE9SVDIpID8gZG1lbV93aWR0aCA6IFNDUjFfTUVNX1dJRFRIX0VSUk9SOworYXNzaWduIHBvcnQyX2FkZHIgICA9IChwb3J0X3NlbCA9PSBTQ1IxX1NFTF9QT1JUMikgPyBkbWVtX2FkZHIgIDogJ3g7Cithc3NpZ24gcG9ydDJfd2RhdGEgID0gKHBvcnRfc2VsID09IFNDUjFfU0VMX1BPUlQyKSA/IGRtZW1fd2RhdGEgOiAneDsKK2BlbHNlIC8vIFNDUjFfWFBST1BfRU4KK2Fzc2lnbiBwb3J0Ml9jbWQgICAgPSBkbWVtX2NtZCAgOworYXNzaWduIHBvcnQyX3dpZHRoICA9IGRtZW1fd2lkdGg7Cithc3NpZ24gcG9ydDJfYWRkciAgID0gZG1lbV9hZGRyIDsKK2Fzc2lnbiBwb3J0Ml93ZGF0YSAgPSBkbWVtX3dkYXRhOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NDUjFfU1ZBX0RNRU1fUlRfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGRtZW1fcmVxIHwtPiAhJGlzdW5rbm93bih7cG9ydF9zZWwsIGRtZW1fY21kLCBkbWVtX3dpZHRofSkKKyAgICApIGVsc2UgJGVycm9yKCJETUVNIHJvdXRlciBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfZG1lbV9yb3V0ZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9kcF9tZW1vcnkuc3YgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZHBfbWVtb3J5LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTU5MWQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfZHBfbWVtb3J5LnN2CkBAIC0wLDAgKzEsMTExIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2RwX21lbW9yeS5zdj4KKy8vLyBAYnJpZWYgICAgICBEdWFsLXBvcnQgc3luY2hyb25vdXMgbWVtb3J5IHdpdGggYnl0ZSBlbmFibGUgaW5wdXRzCisvLy8KKworYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK2BpZmRlZiBTQ1IxX1RDTV9FTgorbW9kdWxlIHNjcjFfZHBfbWVtb3J5CisjKAorICAgIHBhcmFtZXRlciBTQ1IxX1dJRFRIICAgID0gMzIsCisgICAgcGFyYW1ldGVyIFNDUjFfU0laRSAgICAgPSBgU0NSMV9JTUVNX0FXSURUSCdoMDAwMTAwMDAsCisgICAgcGFyYW1ldGVyIFNDUjFfTkJZVEVTICAgPSBTQ1IxX1dJRFRIIC8gOAorKQorKAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGssCisgICAgLy8gUG9ydCBBCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmEsCisgICAgaW5wdXQgICBsb2dpYyBbJGNsb2cyKFNDUjFfU0laRSktMToyXSAgIGFkZHJhLAorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgICAgICAgICBxYSwKKyAgICAvLyBQb3J0IEIKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VuYiwKKyAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX05CWVRFUy0xOjBdICAgICAgICAgd2ViYiwKKyAgICBpbnB1dCAgIGxvZ2ljIFskY2xvZzIoU0NSMV9TSVpFKS0xOjJdICAgYWRkcmIsCisgICAgaW5wdXQgICBsb2dpYyBbU0NSMV9XSURUSC0xOjBdICAgICAgICAgIGRhdGFiLAorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfV0lEVEgtMTowXSAgICAgICAgICBxYgorKTsKKworYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwCisoKiByYW1zdHlsZSA9ICJNOUsiICopICAgIGxvZ2ljIFtTQ1IxX05CWVRFUy0xOjBdWzc6MF0gIG1lbW9yeV9hcnJheSAgWzA6KFNDUjFfU0laRS9TQ1IxX05CWVRFUyktMV07CisgYGVsc2lmIFNDUjFfVFJHVF9GUEdBX0lOVEVMX0FSUklBVgorKCogcmFtc3R5bGUgPSAiTTEwSyIgKikgICBsb2dpYyBbU0NSMV9OQllURVMtMTowXVs3OjBdICBtZW1vcnlfYXJyYXkgIFswOihTQ1IxX1NJWkUvU0NSMV9OQllURVMpLTFdOworIGBlbmRpZgorbG9naWMgWzM6MF0gd2VuYmI7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBvcnQgQiBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gd2VuYmIgPSB7NHt3ZW5ifX0gJiB3ZWJiOworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKHdlbmIpIGJlZ2luCisgICAgICAgIGlmICh3ZW5iYlswXSkgYmVnaW4KKyAgICAgICAgICAgIG1lbW9yeV9hcnJheVthZGRyYl1bMF0gPD0gZGF0YWJbMCs6OF07CisgICAgICAgIGVuZAorICAgICAgICBpZiAod2VuYmJbMV0pIGJlZ2luCisgICAgICAgICAgICBtZW1vcnlfYXJyYXlbYWRkcmJdWzFdIDw9IGRhdGFiWzgrOjhdOworICAgICAgICBlbmQKKyAgICAgICAgaWYgKHdlbmJiWzJdKSBiZWdpbgorICAgICAgICAgICAgbWVtb3J5X2FycmF5W2FkZHJiXVsyXSA8PSBkYXRhYlsxNis6OF07CisgICAgICAgIGVuZAorICAgICAgICBpZiAod2VuYmJbM10pIGJlZ2luCisgICAgICAgICAgICBtZW1vcnlfYXJyYXlbYWRkcmJdWzNdIDw9IGRhdGFiWzI0Kzo4XTsKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgcWIgPD0gbWVtb3J5X2FycmF5W2FkZHJiXTsKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQb3J0IEEgbWVtb3J5IGJlaGF2aW9yYWwgZGVzY3JpcHRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgcWEgPD0gbWVtb3J5X2FycmF5W2FkZHJhXTsKK2VuZAorCitgZWxzZSAvLyBTQ1IxX1RSR1RfRlBHQV9JTlRFTAorCisvLyBDQVNFOiBPVEhFUlMgLSBTQ1IxX1RSR1RfRlBHQV9YSUxJTlgsIFNJTVVMQVRJT04sIEFTSUMgZXRjCisKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFJBTV9TSVpFX1dPUkRTID0gU0NSMV9TSVpFL1NDUjFfTkJZVEVTOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYGlmZGVmIFNDUjFfVFJHVF9GUEdBX1hJTElOWAorKCogcmFtX3N0eWxlID0gImJsb2NrIiAqKSAgbG9naWMgIFtTQ1IxX1dJRFRILTE6MF0gIHJhbV9ibG9jayAgW1JBTV9TSVpFX1dPUkRTLTE6MF07CisgYGVsc2UgIC8vIEFTSUMgb3IgU0lNVUxBVElPTgorbG9naWMgIFtTQ1IxX1dJRFRILTE6MF0gIHJhbV9ibG9jayAgW1JBTV9TSVpFX1dPUkRTLTE6MF07CisgYGVuZGlmCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBvcnQgQSBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAocmVuYSkgYmVnaW4KKyAgICAgICAgcWEgPD0gcmFtX2Jsb2NrW2FkZHJhXTsKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBvcnQgQiBtZW1vcnkgYmVoYXZpb3JhbCBkZXNjcmlwdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAod2VuYikgYmVnaW4KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPFNDUjFfTkJZVEVTOyBpKyspIGJlZ2luCisgICAgICAgICAgICBpZiAod2ViYltpXSkgYmVnaW4KKyAgICAgICAgICAgICAgICByYW1fYmxvY2tbYWRkcmJdW2kqOCArOiA4XSA8PSBkYXRhYltpKjggKzogOF07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgaWYgKHJlbmIpIGJlZ2luCisgICAgICAgIHFiIDw9IHJhbV9ibG9ja1thZGRyYl07CisgICAgZW5kCitlbmQKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9GUEdBX0lOVEVMCisKK2VuZG1vZHVsZSA6IHNjcjFfZHBfbWVtb3J5CisKK2BlbmRpZiAvLyBTQ1IxX1RDTV9FTgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fYWhiLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fYWhiLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDlmOWQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV9haGIuc3YKQEAgLTAsMCArMSwzMTkgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyCpIDIwMTYtMjAyMS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV9pbWVtX2FoYi5zdj4KKy8vLyBAYnJpZWYgICAgICBJbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZQorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FoYi5zdmgiCitgaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCisKK21vZHVsZSBzY3IxX2ltZW1fYWhiICgKKyAgICAvLyBDb250cm9sIFNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKKworICAgIC8vIENvcmUgSW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxX2FjaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXEsCisgICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGltZW1fYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaW1lbV9yZGF0YSwKKyAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgaW1lbV9yZXNwLAorCisgICAgLy8gQUhCIEludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICBbMzowXSAgICAgICAgICAgICAgICAgICBocHJvdCwKKyAgICBvdXRwdXQgIGxvZ2ljICAgWzI6MF0gICAgICAgICAgICAgICAgICAgaGJ1cnN0LAorICAgIG91dHB1dCAgbG9naWMgICBbMjowXSAgICAgICAgICAgICAgICAgICBoc2l6ZSwKKyAgICBvdXRwdXQgIGxvZ2ljICAgWzE6MF0gICAgICAgICAgICAgICAgICAgaHRyYW5zLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBobWFzdGxvY2ssCisgICAgb3V0cHV0ICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhhZGRyLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVhZHksCisgICAgaW5wdXQgICBsb2dpYyAgIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgIGhyZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3AKKworKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZm5kZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKK2xvY2FscGFyYW0gIFNDUjFfRklGT19XSURUSCA9IDI7Citsb2NhbHBhcmFtICBTQ1IxX0ZJRk9fQ05UX1dJRFRIID0gJGNsb2cyKFNDUjFfRklGT19XSURUSCsxKTsKK2BlbmRpZiAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9GU01fQUREUiA9IDEnYjAsCisgICAgU0NSMV9GU01fREFUQSA9IDEnYjEsCisgICAgU0NSMV9GU01fRVJSICA9IDEnYngKK30gdHlwZV9zY3IxX2ZzbV9lOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgaGFkZHI7Cit9IHR5cGVfc2NyMV9yZXFfZmlmb19zOworCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlc3A7CisgICAgbG9naWMgICBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICBocmRhdGE7Cit9IHR5cGVfc2NyMV9yZXNwX2ZpZm9fczsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc207Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb193cjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fdXA7CitgaWZkZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKK3R5cGVfc2NyMV9yZXFfZmlmb19zICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fcjsKK3R5cGVfc2NyMV9yZXFfZmlmb19zIFswOjBdICAgICAgICAgICAgICAgICAgcmVxX2ZpZm87CitgZWxzZSAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAordHlwZV9zY3IxX3JlcV9maWZvX3MgWzA6U0NSMV9GSUZPX1dJRFRILTFdICByZXFfZmlmbzsKK3R5cGVfc2NyMV9yZXFfZmlmb19zIFswOlNDUjFfRklGT19XSURUSC0xXSAgcmVxX2ZpZm9fbmV3OworbG9naWMgICAgICAgW1NDUjFfRklGT19DTlRfV0lEVEgtMTowXSAgICAgICByZXFfZmlmb19jbnQ7Citsb2dpYyAgICAgICBbU0NSMV9GSUZPX0NOVF9XSURUSC0xOjBdICAgICAgIHJlcV9maWZvX2NudF9uZXc7CitgZW5kaWYgLy8gU0NSMV9JTUVNX0FIQl9PVVRfQlAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2ZpZm9fZW1wdHk7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9maWZvX2Z1bGw7CisKK3R5cGVfc2NyMV9yZXNwX2ZpZm9fcyAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9maWZvOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX2ZpZm9faHJlYWR5OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVyZmFjZSB0byBDb3JlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBpbWVtX3JlcV9hY2sgPSB+cmVxX2ZpZm9fZnVsbDsKK2Fzc2lnbiByZXFfZmlmb193ciAgPSB+cmVxX2ZpZm9fZnVsbCAmIGltZW1fcmVxOworCithc3NpZ24gaW1lbV9yZGF0YSA9IHJlc3BfZmlmby5ocmRhdGE7CisKK2Fzc2lnbiBpbWVtX3Jlc3AgPSAocmVzcF9maWZvX2hyZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgPyAocmVzcF9maWZvLmhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sKKyAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSMV9NRU1fUkVTUF9SRFlfRVIKKyAgICAgICAgICAgICAgICAgICAgOiBTQ1IxX01FTV9SRVNQX05PVFJEWTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSRVFfRklGTworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgaWZkZWYgU0NSMV9JTUVNX0FIQl9PVVRfQlAKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHJlcV9maWZvX2Z1bGwgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAofnJlcV9maWZvX2Z1bGwpIGJlZ2luCisgICAgICAgICAgICByZXFfZmlmb19mdWxsIDw9IGltZW1fcmVxICYgfnJlcV9maWZvX3JkOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgcmVxX2ZpZm9fZnVsbCA8PSB+cmVxX2ZpZm9fcmQ7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCithc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHJlcV9maWZvX2Z1bGwgfCBpbWVtX3JlcSk7CisKK2Fzc2lnbiByZXFfZmlmb191cCAgICA9IH5yZXFfZmlmb19yZCAmIHJlcV9maWZvX3dyOworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgorICAgICAgICByZXFfZmlmb19yLmhhZGRyIDw9IGltZW1fYWRkcjsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gcmVxX2ZpZm9bMF0gPSAocmVxX2ZpZm9fZnVsbCkgPyByZXFfZmlmb19yIDogaW1lbV9hZGRyOworCitgZWxzZSAvLyBTQ1IxX0lNRU1fQUhCX09VVF9CUAorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICByZXFfZmlmb191cCAgICAgID0gMSdiMDsKKyAgICByZXFfZmlmb19jbnRfbmV3ID0gcmVxX2ZpZm9fY250OworICAgIHJlcV9maWZvX25ldyAgICAgPSByZXFfZmlmbzsKKyAgICBjYXNlICh7cmVxX2ZpZm9fcmQsIHJlcV9maWZvX3dyfSkKKyAgICAgICAgMidiMDAgOiBiZWdpbgorICAgICAgICAgICAgLy8gbm90aGluZyB0b2RvCisgICAgICAgIGVuZAorICAgICAgICAyJ2IwMTogYmVnaW4KKyAgICAgICAgICAgIC8vIEZJRk8gd3JpdGUKKyAgICAgICAgICAgIHJlcV9maWZvX3VwID0gMSdiMTsKKyAgICAgICAgICAgIHJlcV9maWZvX25ld1tyZXFfZmlmb19jbnRdLmhhZGRyICA9IGltZW1fYWRkcjsKKyAgICAgICAgICAgIHJlcV9maWZvX2NudF9uZXcgPSByZXFfZmlmb19jbnQgKyAxJ2IxOworICAgICAgICBlbmQKKyAgICAgICAgMidiMTAgOiBiZWdpbgorICAgICAgICAgICAgLy8gRklGTyByZWFkCisgICAgICAgICAgICByZXFfZmlmb191cCAgICAgPSAxJ2IxOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdID0gcmVxX2ZpZm9fbmV3WzFdOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzFdLmhhZGRyICA9ICd4OworICAgICAgICAgICAgcmVxX2ZpZm9fY250X25ldyA9IHJlcV9maWZvX2NudCAtIDEnYjE7CisgICAgICAgIGVuZAorICAgICAgICAyJ2IxMSA6IGJlZ2luCisgICAgICAgICAgICAvLyBSZWFkIGFuZCBXcml0ZSBGSUZPLiBJdCBpcyBwb3NzaWJsZSBvbmx5IHdoZW4gZmlmb19jbnQgPSAxCisgICAgICAgICAgICByZXFfZmlmb191cCAgICAgICAgICAgPSAxJ2IxOworICAgICAgICAgICAgcmVxX2ZpZm9fbmV3WzBdLmhhZGRyID0gaW1lbV9hZGRyOworICAgICAgICBlbmQKKyAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgICAgICByZXFfZmlmb191cCAgICAgID0gJ3g7CisgICAgICAgICAgICByZXFfZmlmb19jbnRfbmV3ID0gJ3g7CisgICAgICAgICAgICByZXFfZmlmb19uZXcgICAgID0gJ3g7CisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKK2VuZAorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICByZXFfZmlmb19jbnQgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKHJlcV9maWZvX3VwKSBiZWdpbgorICAgICAgICAgICAgcmVxX2ZpZm9fY250IDw9IHJlcV9maWZvX2NudF9uZXc7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCithc3NpZ24gcmVxX2ZpZm9fZnVsbCAgPSAocmVxX2ZpZm9fY250ID09IFNDUjFfRklGT19XSURUSCk7Cithc3NpZ24gcmVxX2ZpZm9fZW1wdHkgPSB+KHxyZXFfZmlmb19jbnQpOworCithbHdheXNfZmYgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAocmVxX2ZpZm9fdXApIGJlZ2luCisgICAgICAgIHJlcV9maWZvIDw9IHJlcV9maWZvX25ldzsKKyAgICBlbmQKK2VuZAorYGVuZGlmIC8vIFNDUjFfSU1FTV9BSEJfT1VUX0JQCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRlNNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGZzbSA8PSBTQ1IxX0ZTTV9BRERSOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGNhc2UgKGZzbSkKKyAgICAgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGZzbSA8PSAocmVxX2ZpZm9fZW1wdHkpID8gU0NSMV9GU01fQUREUiA6IFNDUjFfRlNNX0RBVEE7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChocmVzcCA9PSBTQ1IxX0hSRVNQX09LQVkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gKHJlcV9maWZvX2VtcHR5KSA/IFNDUjFfRlNNX0FERFIgOiBTQ1IxX0ZTTV9EQVRBOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fRVJSOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZGNhc2UKKyAgICBlbmQKK2VuZAorCithbHdheXNfY29tYiBiZWdpbgorICAgIHJlcV9maWZvX3JkID0gMSdiMDsKKyAgICBjYXNlIChmc20pCisgICAgICAgIFNDUjFfRlNNX0FERFIgOiBiZWdpbgorICAgICAgICAgICAgaWYgKGhyZWFkeSkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXFfZmlmb19yZCA9IH5yZXFfZmlmb19lbXB0eTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9GU01fREFUQSA6IGJlZ2luCisgICAgICAgICAgICBpZiAoaHJlYWR5KSBiZWdpbgorICAgICAgICAgICAgICAgIHJlcV9maWZvX3JkID0gfnJlcV9maWZvX2VtcHR5ICYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgcmVxX2ZpZm9fcmQgPSAxJ2J4OworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGSUZPIHJlc3BvbnNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BpZmRlZiBTQ1IxX0lNRU1fQUhCX0lOX0JQCithc3NpZ24gcmVzcF9maWZvX2hyZWFkeSA9IChmc20gPT0gU0NSMV9GU01fREFUQSkgPyBocmVhZHkgOiAxJ2IwOworYXNzaWduIHJlc3BfZmlmby5ocmVzcCAgPSBocmVzcDsKK2Fzc2lnbiByZXNwX2ZpZm8uaHJkYXRhID0gaHJkYXRhOworYGVsc2UgLy8gU0NSMV9JTUVNX0FIQl9JTl9CUAorYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgcmVzcF9maWZvX2hyZWFkeSA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHJlc3BfZmlmb19ocmVhZHkgPD0gKGZzbSA9PSBTQ1IxX0ZTTV9EQVRBKSA/IGhyZWFkeSA6IDEnYjA7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGhyZWFkeSAmIChmc20gPT0gU0NSMV9GU01fREFUQSkpIGJlZ2luCisgICAgICAgIHJlc3BfZmlmby5ocmVzcCAgPD0gaHJlc3A7CisgICAgICAgIHJlc3BfZmlmby5ocmRhdGEgPD0gaHJkYXRhOworICAgIGVuZAorZW5kCitgZW5kaWYgLy8gU0NSMV9JTUVNX0FIQl9JTl9CUAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVyZmFjZSB0byBBSEIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGhwcm90W1NDUjFfSFBST1RfREFUQV0gID0gMSdiMDsKK2Fzc2lnbiBocHJvdFtTQ1IxX0hQUk9UX1BSVl0gICA9IDEnYjA7Cithc3NpZ24gaHByb3RbU0NSMV9IUFJPVF9CVUZdICAgPSAxJ2IwOworYXNzaWduIGhwcm90W1NDUjFfSFBST1RfQ0FDSEVdID0gMSdiMDsKKworYXNzaWduIGhidXJzdCAgICAgICA9IFNDUjFfSEJVUlNUX1NJTkdMRTsKK2Fzc2lnbiBoc2l6ZSAgICAgICAgPSBTQ1IxX0hTSVpFXzMyQjsKK2Fzc2lnbiBobWFzdGxvY2sgICAgPSAxJ2IwOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX0lETEU7CisgICAgY2FzZSAoZnNtKQorICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KKyAgICAgICAgICAgIGlmICh+cmVxX2ZpZm9fZW1wdHkpIGJlZ2luCisgICAgICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfTk9OU0VROworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChocmVhZHkpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKGhyZXNwID09IFNDUjFfSFJFU1BfT0tBWSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5yZXFfZmlmb19lbXB0eSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGh0cmFucyA9IFNDUjFfSFRSQU5TX05PTlNFUTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQgOiBiZWdpbgorICAgICAgICAgICAgaHRyYW5zID0gU0NSMV9IVFJBTlNfRVJSOworICAgICAgICBlbmQKKyAgICBlbmRjYXNlCitlbmQKKworYXNzaWduIGhhZGRyICA9IHJlcV9maWZvWzBdLmhhZGRyOworCitgaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQXNzZXJ0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ2hlY2sgQ29yZSBpbnRlcmZhY2UKK1NDUjFfU1ZBX0lNRU1fQUhCX0JSSURHRV9SRVFfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgICEkaXN1bmtub3duKGltZW1fcmVxKQorICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaW1lbV9yZXEgaGFzIHVua25vd24gdmFsdWVzIik7CisKK1NDUjFfSU1FTV9BSEJfQlJJREdFX0FERFJfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGltZW1fcmVxIHwtPiAhJGlzdW5rbm93bihpbWVtX2FkZHIpCisgICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBpbWVtX2FkZHIgaGFzIHVua25vd24gdmFsdWVzIik7CisKK1NDUjFfSU1FTV9BSEJfQlJJREdFX0FERFJfQUxMSUdOIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGltZW1fcmVxIHwtPiAoaW1lbV9hZGRyWzE6MF0gPT0gJzApCisgICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBpbWVtX2FkZHIgaGFzIHVuYWxpZ24gdmFsdWVzIik7CisKKy8vIENoZWNrIEFIQiBpbnRlcmZhY2UKK1NDUjFfSU1FTV9BSEJfQlJJREdFX0hSRUFEWV9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oaHJlYWR5KQorICAgICkgZWxzZSAkZXJyb3IoIklNRU0gQUhCIGJyaWRnZSBFcnJvcjogaHJlYWR5IGhhcyB1bmtub3duIHZhbHVlcyIpOworCitTQ1IxX0lNRU1fQUhCX0JSSURHRV9IUkVTUF9YQ0hFQ0sgOiBhc3NlcnQgcHJvcGVydHkgKAorICAgIEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pCisgICAgISRpc3Vua25vd24oaHJlc3ApCisgICAgKSBlbHNlICRlcnJvcigiSU1FTSBBSEIgYnJpZGdlIEVycm9yOiBocmVzcCBoYXMgdW5rbm93biB2YWx1ZXMiKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfaW1lbV9haGIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3JvdXRlci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDc2ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fcm91dGVyLnN2CkBAIC0wLDAgKzEsMTg1IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX2ltZW1fcm91dGVyLnN2PgorLy8vIEBicmllZiAgICAgIEluc3RydWN0aW9uIG1lbW9yeSByb3V0ZXIKKy8vLworYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCisKK21vZHVsZSBzY3IxX2ltZW1fcm91dGVyCisjKAorICAgIHBhcmFtZXRlciBTQ1IxX0FERFJfTUFTSyAgICA9IGBTQ1IxX0lNRU1fQVdJRFRIJ2hGRkZGMDAwMCwKKyAgICBwYXJhbWV0ZXIgU0NSMV9BRERSX1BBVFRFUk4gPSBgU0NSMV9JTUVNX0FXSURUSCdoMDAwMTAwMDAKKykKKygKKyAgICAvLyBDb250cm9sIHNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKKworICAgIC8vIENvcmUgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxX2FjaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIGltZW1fY21kLAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICBpbWVtX2FkZHIsCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgIGltZW1fcmRhdGEsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGltZW1fcmVzcCwKKworICAgIC8vIFBPUlQwIGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MF9yZXFfYWNrLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MF9yZXEsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIHBvcnQwX2NtZCwKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgcG9ydDBfYWRkciwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgcG9ydDBfcmRhdGEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHBvcnQwX3Jlc3AsCisKKyAgICAvLyBQT1JUMSBpbnRlcmZhY2UKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDFfcmVxX2FjaywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDFfcmVxLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBwb3J0MV9jbWQsCisgICAgb3V0cHV0ICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgIHBvcnQxX2FkZHIsCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9EV0lEVEgtMTowXSAgIHBvcnQxX3JkYXRhLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICBwb3J0MV9yZXNwCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHR5cGVzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgZW51bSBsb2dpYyB7CisgICAgU0NSMV9GU01fQUREUiwKKyAgICBTQ1IxX0ZTTV9EQVRBCit9IHR5cGVfc2NyMV9mc21fZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWwgZGVjbGFyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZV9zY3IxX2ZzbV9lICAgICAgICAgICAgICAgICBmc207Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X3NlbF9yOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICBzZWxfcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIHNlbF9yZXNwOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxfcmVxX2FjazsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGU00KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIHBvcnRfc2VsID0gKChpbWVtX2FkZHIgJiBTQ1IxX0FERFJfTUFTSykgPT0gU0NSMV9BRERSX1BBVFRFUk4pOworCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBmc20gICAgICAgIDw9IFNDUjFfRlNNX0FERFI7CisgICAgICAgIHBvcnRfc2VsX3IgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBjYXNlIChmc20pCisgICAgICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoaW1lbV9yZXEgJiBzZWxfcmVxX2FjaykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0RBVEE7CisgICAgICAgICAgICAgICAgICAgIHBvcnRfc2VsX3IgPD0gcG9ydF9zZWw7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgorICAgICAgICAgICAgICAgIGNhc2UgKHNlbF9yZXNwKQorICAgICAgICAgICAgICAgICAgICBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6IGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1lbV9yZXEgJiBzZWxfcmVxX2FjaykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fREFUQTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X3NlbF9yIDw9IHBvcnRfc2VsOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc20gPD0gU0NSMV9GU01fQUREUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgU0NSMV9NRU1fUkVTUF9SRFlfRVIgOiBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZnNtIDw9IFNDUjFfRlNNX0FERFI7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCitlbmQKKworYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBpZiAoKGZzbSA9PSBTQ1IxX0ZTTV9BRERSKSB8ICgoZnNtID09IFNDUjFfRlNNX0RBVEEpICYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSkpIGJlZ2luCisgICAgICAgIHNlbF9yZXFfYWNrID0gKHBvcnRfc2VsKSA/IHBvcnQxX3JlcV9hY2sgOiBwb3J0MF9yZXFfYWNrOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIHNlbF9yZXFfYWNrID0gMSdiMDsKKyAgICBlbmQKK2VuZAorCithc3NpZ24gc2VsX3JkYXRhID0gKHBvcnRfc2VsX3IpID8gcG9ydDFfcmRhdGEgOiBwb3J0MF9yZGF0YTsKK2Fzc2lnbiBzZWxfcmVzcCAgPSAocG9ydF9zZWxfcikgPyBwb3J0MV9yZXNwICA6IHBvcnQwX3Jlc3A7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJmYWNlIHRvIGNvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGltZW1fcmVxX2FjayA9IHNlbF9yZXFfYWNrOworYXNzaWduIGltZW1fcmRhdGEgICA9IHNlbF9yZGF0YTsKK2Fzc2lnbiBpbWVtX3Jlc3AgICAgPSBzZWxfcmVzcDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gUE9SVDAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBwb3J0MF9yZXEgPSAxJ2IwOworICAgIGNhc2UgKGZzbSkKKyAgICAgICAgU0NSMV9GU01fQUREUiA6IGJlZ2luCisgICAgICAgICAgICBwb3J0MF9yZXEgPSBpbWVtX3JlcSAmIH5wb3J0X3NlbDsKKyAgICAgICAgZW5kCisgICAgICAgIFNDUjFfRlNNX0RBVEEgOiBiZWdpbgorICAgICAgICAgICAgaWYgKHNlbF9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBiZWdpbgorICAgICAgICAgICAgICAgIHBvcnQwX3JlcSA9IGltZW1fcmVxICYgfnBvcnRfc2VsOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCithc3NpZ24gcG9ydDBfY21kICAgPSAofnBvcnRfc2VsKSA/IGltZW1fY21kICA6IFNDUjFfTUVNX0NNRF9FUlJPUjsKK2Fzc2lnbiBwb3J0MF9hZGRyICA9ICh+cG9ydF9zZWwpID8gaW1lbV9hZGRyIDogJ3g7CitgZWxzZSAvLyBTQ1IxX1hQUk9QX0VOCithc3NpZ24gcG9ydDBfY21kICAgPSBpbWVtX2NtZCA7Cithc3NpZ24gcG9ydDBfYWRkciAgPSBpbWVtX2FkZHI7CitgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVyZmFjZSB0byBQT1JUMQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXNfY29tYiBiZWdpbgorICAgIHBvcnQxX3JlcSA9IDEnYjA7CisgICAgY2FzZSAoZnNtKQorICAgICAgICBTQ1IxX0ZTTV9BRERSIDogYmVnaW4KKyAgICAgICAgICAgIHBvcnQxX3JlcSA9IGltZW1fcmVxICYgcG9ydF9zZWw7CisgICAgICAgIGVuZAorICAgICAgICBTQ1IxX0ZTTV9EQVRBIDogYmVnaW4KKyAgICAgICAgICAgIGlmIChzZWxfcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgYmVnaW4KKyAgICAgICAgICAgICAgICBwb3J0MV9yZXEgPSBpbWVtX3JlcSAmIHBvcnRfc2VsOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBkZWZhdWx0IDogYmVnaW4KKyAgICAgICAgZW5kCisgICAgZW5kY2FzZQorZW5kCisKK2BpZmRlZiBTQ1IxX1hQUk9QX0VOCithc3NpZ24gcG9ydDFfY21kICAgPSAocG9ydF9zZWwpID8gaW1lbV9jbWQgIDogU0NSMV9NRU1fQ01EX0VSUk9SOworYXNzaWduIHBvcnQxX2FkZHIgID0gKHBvcnRfc2VsKSA/IGltZW1fYWRkciA6ICd4OworYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgorYXNzaWduIHBvcnQxX2NtZCAgID0gaW1lbV9jbWQgOworYXNzaWduIHBvcnQxX2FkZHIgID0gaW1lbV9hZGRyOworYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NDUjFfU1ZBX0lNRU1fUlRfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKKyAgICBAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKQorICAgIGltZW1fcmVxIHwtPiAhJGlzdW5rbm93bih7cG9ydF9zZWwsIGltZW1fY21kfSkKKyAgICApIGVsc2UgJGVycm9yKCJJTUVNIHJvdXRlciBFcnJvcjogdW5rbm93biB2YWx1ZXMiKTsKKworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfaW1lbV9yb3V0ZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9tZW1fYXhpLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX21lbV9heGkuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2NDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV9tZW1fYXhpLnN2CkBAIC0wLDAgKzEsMzYzIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX21lbV9heGkuc3Y+CisvLy8gQGJyaWVmICAgICAgTWVtb3J5IEFYSSBicmlkZ2UKKy8vLworCitgaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKworbW9kdWxlIHNjcjFfbWVtX2F4aQorIygKKyAgICBwYXJhbWV0ZXIgU0NSMV9SRVFfQlVGX1NJWkUgICAgID0gMiwgICAgICAgICAgICAgICAgICAgIC8vIFBvd2VyIG9mIDIgdmFsdWUKKyAgICBwYXJhbWV0ZXIgU0NSMV9BWElfSURXSURUSCAgICAgID0gNCwKKyAgICBwYXJhbWV0ZXIgU0NSMV9BRERSX1dJRFRIICAgICAgID0gMzIsCisgICAgcGFyYW1ldGVyIFNDUjFfQVhJX1JFUV9CUCAgICAgICA9IDEsCisgICAgcGFyYW1ldGVyIFNDUjFfQVhJX1JFU1BfQlAgICAgICA9IDEKKykKKygKKyAgICAvLyBDbG9jayBhbmQgUmVzZXQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX3JlaW5pdCwKKyAgICAvLyBDb3JlIEludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lkbGUsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVxX2FjaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXEsCisgICAgaW5wdXQgICB0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgIGNvcmVfY21kLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICBjb3JlX3dpZHRoLAorICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQUREUl9XSURUSC0xOjBdICAgICBjb3JlX2FkZHIsCisgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGNvcmVfd2RhdGEsCisgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGNvcmVfcmRhdGEsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgIGNvcmVfcmVzcCwKKworICAgIC8vIEFYSQorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQVhJX0lEV0lEVEgtMTowXSAgICBhd2lkLAorICAgIG91dHB1dCAgbG9naWMgW1NDUjFfQUREUl9XSURUSC0xOjBdICAgICBhd2FkZHIsCisgICAgb3V0cHV0ICBsb2dpYyBbIDc6MF0gICAgICAgICAgICAgICAgICAgIGF3bGVuLAorICAgIG91dHB1dCAgbG9naWMgWyAyOjBdICAgICAgICAgICAgICAgICAgICBhd3NpemUsCisgICAgb3V0cHV0ICBsb2dpYyBbIDE6MF0gICAgICAgICAgICAgICAgICAgIGF3YnVyc3QsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3bG9jaywKKyAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXdjYWNoZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFsgMjowXSAgICAgICAgICAgICAgICAgICAgYXdwcm90LAorICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhd3JlZ2lvbiwKKyAgICBvdXRwdXQgIGxvZ2ljIFsgMzowXSAgICAgICAgICAgICAgICAgICAgYXd1c2VyLAorICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhd3FvcywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXd2YWxpZCwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdyZWFkeSwKKyAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgd2RhdGEsCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgIHdzdHJiLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICB3bGFzdCwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgd3VzZXIsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHd2YWxpZCwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JlYWR5LAorICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQVhJX0lEV0lEVEgtMTowXSAgICBiaWQsCisgICAgaW5wdXQgICBsb2dpYyBbIDE6MF0gICAgICAgICAgICAgICAgICAgIGJyZXNwLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBidmFsaWQsCisgICAgaW5wdXQgICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGJ1c2VyLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhZHksCisgICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BWElfSURXSURUSC0xOjBdICAgIGFyaWQsCisgICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BRERSX1dJRFRILTE6MF0gICAgIGFyYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljIFsgNzowXSAgICAgICAgICAgICAgICAgICAgYXJsZW4sCisgICAgb3V0cHV0ICBsb2dpYyBbIDI6MF0gICAgICAgICAgICAgICAgICAgIGFyc2l6ZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFsgMTowXSAgICAgICAgICAgICAgICAgICAgYXJidXJzdCwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJsb2NrLAorICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhcmNhY2hlLAorICAgIG91dHB1dCAgbG9naWMgWyAyOjBdICAgICAgICAgICAgICAgICAgICBhcnByb3QsCisgICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGFycmVnaW9uLAorICAgIG91dHB1dCAgbG9naWMgWyAzOjBdICAgICAgICAgICAgICAgICAgICBhcnVzZXIsCisgICAgb3V0cHV0ICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIGFycW9zLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnZhbGlkLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJlYWR5LAorICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQVhJX0lEV0lEVEgtMTowXSAgICByaWQsCisgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgIHJkYXRhLAorICAgIGlucHV0ICAgbG9naWMgWyAxOjBdICAgICAgICAgICAgICAgICAgICBycmVzcCwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxhc3QsCisgICAgaW5wdXQgICBsb2dpYyBbIDM6MF0gICAgICAgICAgICAgICAgICAgIHJ1c2VyLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBydmFsaWQsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJyZWFkeQorKTsKKworCisvLyBMb2NhbCBmdW5jdGlvbnMKK2Z1bmN0aW9uIGF1dG9tYXRpYyBsb2dpYyBbMjowXSB3aWR0aDJheHNpemUgKAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgIHdpZHRoICk7CisgICAgbG9naWMgWzI6MF0gYXhzaXplOworYmVnaW4KKyAgICBjYXNlICh3aWR0aCkKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICBheHNpemUgPSAzJ2IwMDA7CisgICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEOiAgYXhzaXplID0gMydiMDAxOworICAgICAgICBTQ1IxX01FTV9XSURUSF9XT1JEIDogIGF4c2l6ZSA9IDMnYjAxMDsKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICBheHNpemUgPSAneDsKKyAgICBlbmRjYXNlCisKKyAgICByZXR1cm4gYXhzaXplOworZW5kCitlbmRmdW5jdGlvbjogd2lkdGgyYXhzaXplCisKK3R5cGVkZWYgc3RydWN0IHBhY2tlZCB7CisgICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV93aWR0aDsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgW1NDUjFfQUREUl9XSURUSC0xOjBdICAgICAgYXhpX2FkZHI7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszMTowXSAgICAgIGF4aV93ZGF0YTsKK30gdHlwZV9zY3IxX3JlcXVlc3RfczsKKwordHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3dyaXRlOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfYWRkcjsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxX2RhdGE7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9yZXNwOworfSB0eXBlX3NjcjFfcmVxX3N0YXR1c19zOworCisKK3R5cGVfc2NyMV9yZXF1ZXN0X3MgICAgICAgICBbU0NSMV9SRVFfQlVGX1NJWkUtMTowXSAgICAgcmVxX2ZpZm87Cit0eXBlX3NjcjFfcmVxX3N0YXR1c19zICAgICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgIHJlcV9zdGF0dXM7Cit0eXBlX3NjcjFfcmVxX3N0YXR1c19zICAgICAgW1NDUjFfUkVRX0JVRl9TSVpFLTE6MF0gICAgIHJlcV9zdGF0dXNfbmV3OworbG9naWMgICAgICAgICAgICAgICAgICAgICAgIFtTQ1IxX1JFUV9CVUZfU0laRS0xOjBdICAgICByZXFfc3RhdHVzX2VuOworbG9naWMgICAgICAgICAgICAgICBbJGNsb2cyKFNDUjFfUkVRX0JVRl9TSVpFKS0xOjBdICAgICByZXFfYXZhbF9wdHI7Citsb2dpYyAgICAgICAgICAgICAgIFskY2xvZzIoU0NSMV9SRVFfQlVGX1NJWkUpLTE6MF0gICAgIHJlcV9wcm9jX3B0cjsKK2xvZ2ljICAgICAgICAgICAgICAgWyRjbG9nMihTQ1IxX1JFUV9CVUZfU0laRSktMTowXSAgICAgcmVxX2RvbmVfcHRyOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycmVzcF9lcnI7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszMTowXSAgICAgIHJjdmRfcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdmRfcmVzcDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfcmVhZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfd3JpdGU7CisKKworCithc3NpZ24gY29yZV9yZXFfYWNrID0gICB+YXhpX3JlaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgIH5yZXFfc3RhdHVzW3JlcV9hdmFsX3B0cl0ucmVxX3Jlc3AgJgorICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcmVzcCE9U0NSMV9NRU1fUkVTUF9SRFlfRVI7CisKKworYXNzaWduIHJyZWFkeSAgICAgID0gfnJlcV9zdGF0dXNbcmVxX2RvbmVfcHRyXS5yZXFfd3JpdGU7Cithc3NpZ24gYnJlYWR5ICAgICAgPSAgcmVxX3N0YXR1c1tyZXFfZG9uZV9wdHJdLnJlcV93cml0ZTsKKworCithc3NpZ24gZm9yY2VfcmVhZCAgPSBiaXQnKFNDUjFfQVhJX1JFUV9CUCkgJiBjb3JlX3JlcSAmIGNvcmVfcmVxX2FjayAmIHJlcV9hdmFsX3B0cj09cmVxX3Byb2NfcHRyICYgY29yZV9jbWQ9PVNDUjFfTUVNX0NNRF9SRDsKK2Fzc2lnbiBmb3JjZV93cml0ZSA9IGJpdCcoU0NSMV9BWElfUkVRX0JQKSAmIGNvcmVfcmVxICYgY29yZV9yZXFfYWNrICYgcmVxX2F2YWxfcHRyPT1yZXFfcHJvY19wdHIgJiBjb3JlX2NtZD09U0NSMV9NRU1fQ01EX1dSOworCisKK2Fsd2F5c19jb21iIGJlZ2luOiBpZGxlX3N0YXR1cworICAgIGNvcmVfaWRsZSA9IDEnYjE7CisgICAgZm9yIChpbnQgdW5zaWduZWQgaT0wOyBpPFNDUjFfUkVRX0JVRl9TSVpFOyArK2kpIGJlZ2luCisgICAgICAgIGNvcmVfaWRsZSAmPSByZXFfc3RhdHVzW2ldLnJlcV9yZXNwPT0xJ2IwOworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmIChjb3JlX3JlcSAmIGNvcmVfcmVxX2FjaykgYmVnaW4KKyAgICAgICAgcmVxX2ZpZm9bcmVxX2F2YWxfcHRyXS5heGlfd2lkdGggPD0gY29yZV93aWR0aDsKKyAgICAgICAgcmVxX2ZpZm9bcmVxX2F2YWxfcHRyXS5heGlfYWRkciAgPD0gY29yZV9hZGRyOworICAgICAgICByZXFfZmlmb1tyZXFfYXZhbF9wdHJdLmF4aV93ZGF0YSA8PSBjb3JlX3dkYXRhOworICAgIGVuZAorZW5kCisKKy8vIFJlcXVlc3QgU3RhdHVzIFF1ZXVlCisvLyBJdCBpcyB1c2VkIGZvciBob2xkaW5nIGNvbnRyb2wgaW5mbyBvZiBwcm9jZXNzaW5nIHJlcXVlc3RzCisKKy8vIENvbWJpbmF0aW9uYWwgbG9naWMgb2YgUmVxdWVzdCBTdGF0dXMgUXVldWUKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgLy8gRGVmYXVsdAorICAgIHJlcV9zdGF0dXNfZW4gID0gJzA7IC8vIE5vIHVwZGF0ZQorICAgIHJlcV9zdGF0dXNfbmV3ID0gcmVxX3N0YXR1czsgLy8gSG9sZCByZXF1ZXN0IGluZm8KKworICAgIC8vIFVwZGF0ZSBzdGF0dXMgb24gbmV3IGNvcmUgcmVxdWVzdAorICAgIGlmKCBjb3JlX3JlcSAmIGNvcmVfcmVxX2FjayApIGJlZ2luCisgICAgICAgIHJlcV9zdGF0dXNfZW5bcmVxX2F2YWxfcHRyXSAgICAgICAgICAgID0gMSdkMTsKKworICAgICAgICByZXFfc3RhdHVzX25ld1tyZXFfYXZhbF9wdHJdLnJlcV9yZXNwICA9IDEnZDE7CisgICAgICAgIHJlcV9zdGF0dXNfbmV3W3JlcV9hdmFsX3B0cl0ucmVxX3dyaXRlID0gY29yZV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSOworCisgICAgICAgIHJlcV9zdGF0dXNfbmV3W3JlcV9hdmFsX3B0cl0ucmVxX2FkZHIgID0gfiggKGZvcmNlX3JlYWQgJiBhcnJlYWR5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcmNlX3dyaXRlICYgYXdyZWFkeSkgKTsKKworICAgICAgICByZXFfc3RhdHVzX25ld1tyZXFfYXZhbF9wdHJdLnJlcV9kYXRhICA9IH4oIChmb3JjZV93cml0ZSAmIHdyZWFkeSAmIGF3bGVuID09IDgnZDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAofmZvcmNlX3dyaXRlICYgY29yZV9jbWQgPT0gU0NSMV9NRU1fQ01EX1JEKSApOworICAgIGVuZAorCisgICAgLy8gVXBkYXRlIHN0YXR1cyBvbiBBWEkgYWRkcmVzcyBwaGFzZQorICAgIGlmICggKGF3dmFsaWQgJiBhd3JlYWR5KSB8IChhcnZhbGlkICYgYXJyZWFkeSkgKSBiZWdpbgorICAgICAgICByZXFfc3RhdHVzX2VuW3JlcV9wcm9jX3B0cl0gICAgICAgICAgID0gMSdkMTsKKyAgICAgICAgcmVxX3N0YXR1c19uZXdbcmVxX3Byb2NfcHRyXS5yZXFfYWRkciA9IDEnZDA7CisgICAgZW5kCisKKyAgICAvLyBVcGRhdGUgc3RhdHVzIG9uIEFYSSBkYXRhIHBoYXNlCisgICAgaWYgKCB3dmFsaWQgJiB3cmVhZHkgJiB3bGFzdCApIGJlZ2luCisgICAgICAgIHJlcV9zdGF0dXNfZW5bcmVxX3Byb2NfcHRyXSAgICAgICAgICAgPSAxJ2QxOworICAgICAgICByZXFfc3RhdHVzX25ld1tyZXFfcHJvY19wdHJdLnJlcV9kYXRhID0gMSdkMDsKKyAgICBlbmQKKworICAgIC8vIFVwZGF0ZSBzdGF0dXMgd2hlbiBBWEkgZmluaXNoIHRyYW5zYWN0aW9uCisgICAgaWYgKCAoYnZhbGlkICYgYnJlYWR5KSB8IChydmFsaWQgJiBycmVhZHkgJiBybGFzdCkgKSBiZWdpbgorICAgICAgICByZXFfc3RhdHVzX2VuW3JlcV9kb25lX3B0cl0gICAgICAgICAgID0gMSdkMTsKKyAgICAgICAgcmVxX3N0YXR1c19uZXdbcmVxX2RvbmVfcHRyXS5yZXFfcmVzcCA9IDEnZDA7CisgICAgZW5kCitlbmQKKworLy8gUmVxdWVzdCBTdGF0dXMgUXVldWUgcmVnaXN0ZXIKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHJlcV9zdGF0dXMgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgZm9yIChpbnQgdW5zaWduZWQgaSA9IDA7IGkgPCBTQ1IxX1JFUV9CVUZfU0laRTsgKytpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCByZXFfc3RhdHVzX2VuW2ldICkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXFfc3RhdHVzW2ldIDw9IHJlcV9zdGF0dXNfbmV3W2ldOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9hdmFsX3B0ciA8PSAnMDsKKyAgICBlbHNlIGlmIChjb3JlX3JlcSAmIGNvcmVfcmVxX2FjaykgICByZXFfYXZhbF9wdHIgPD0gcmVxX2F2YWxfcHRyICsgMSdiMTsKK2VuZAorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICByZXFfcHJvY19wdHIgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXd2YWxpZCAmIGF3cmVhZHkgJiB3dmFsaWQgJiB3cmVhZHkgJiB3bGFzdCkgfAorICAgICAgICAgICAgKH5mb3JjZV93cml0ZSAmIH5yZXFfc3RhdHVzW3JlcV9wcm9jX3B0cl0ucmVxX2RhdGEgJiBhd3ZhbGlkICYgYXdyZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8CisgICAgICAgICAgICAofmZvcmNlX3dyaXRlICYgfnJlcV9zdGF0dXNbcmVxX3Byb2NfcHRyXS5yZXFfYWRkciAmICAgICAgICAgICAgICAgICAgICAgd3ZhbGlkICYgd3JlYWR5ICYgd2xhc3QpIHwKKyAgICAgICAgICAgICggICAgICAgICAgICAgICB+cmVxX3N0YXR1c1tyZXFfcHJvY19wdHJdLnJlcV9kYXRhICYgYXJ2YWxpZCAmIGFycmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICkgICkgYmVnaW4KKworICAgICAgICAgICAgcmVxX3Byb2NfcHRyIDw9IHJlcV9wcm9jX3B0ciArIDEnYjE7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHJlcV9kb25lX3B0ciA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoKGJ2YWxpZCAmIGJyZWFkeSB8IHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSAmIHJlcV9zdGF0dXNbcmVxX2RvbmVfcHRyXS5yZXFfcmVzcCkgYmVnaW4KKworICAgICAgICAgICAgcmVxX2RvbmVfcHRyIDw9IHJlcV9kb25lX3B0ciArIDEnYjE7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKKworCithc3NpZ24gYXJ2YWxpZCA9IHJlcV9zdGF0dXNbcmVxX3Byb2NfcHRyXS5yZXFfYWRkciAmIH5yZXFfc3RhdHVzW3JlcV9wcm9jX3B0cl0ucmVxX3dyaXRlIHwgZm9yY2VfcmVhZDsKK2Fzc2lnbiBhd3ZhbGlkID0gcmVxX3N0YXR1c1tyZXFfcHJvY19wdHJdLnJlcV9hZGRyICYgIHJlcV9zdGF0dXNbcmVxX3Byb2NfcHRyXS5yZXFfd3JpdGUgfCBmb3JjZV93cml0ZTsKK2Fzc2lnbiAgd3ZhbGlkID0gcmVxX3N0YXR1c1tyZXFfcHJvY19wdHJdLnJlcV9kYXRhICYgIHJlcV9zdGF0dXNbcmVxX3Byb2NfcHRyXS5yZXFfd3JpdGUgfCBmb3JjZV93cml0ZTsKKworYXNzaWduIGFyYWRkciAgPSAofmZvcmNlX3JlYWQgKT8gcmVxX2ZpZm9bcmVxX3Byb2NfcHRyXS5heGlfYWRkciA6IGNvcmVfYWRkcjsKK2Fzc2lnbiBhd2FkZHIgID0gKH5mb3JjZV93cml0ZSk/IHJlcV9maWZvW3JlcV9wcm9jX3B0cl0uYXhpX2FkZHIgOiBjb3JlX2FkZHI7CisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKGJ2YWxpZCAmIGJyZWFkeSAmIHJlcV9zdGF0dXNbcmVxX2RvbmVfcHRyXS5yZXFfcmVzcCkgYmVnaW4KKyAgICAgICAgcmN2ZF9yZXNwID0gKGJyZXNwPT0yJ2IwMCk/IFNDUjFfTUVNX1JFU1BfUkRZX09LIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfTUVNX1JFU1BfUkRZX0VSOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmIChydmFsaWQgJiBycmVhZHkgJiBybGFzdCAmIHJlcV9zdGF0dXNbcmVxX2RvbmVfcHRyXS5yZXFfcmVzcCkgYmVnaW4KKyAgICAgICAgICAgIHJjdmRfcmVzcCA9IChycmVzcD09MidiMDApPyBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9NRU1fUkVTUF9SRFlfRVI7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByY3ZkX3Jlc3AgPSBTQ1IxX01FTV9SRVNQX05PVFJEWTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworCisKKworLy8gV3JpdGUgZGF0YSBzaWduYWxzIGFkYXB0YXRpb24KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgaWYgKGZvcmNlX3dyaXRlKQorICAgICAgICBjYXNlIChjb3JlX3dpZHRoKQorICAgICAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICB3c3RyYiA9IDQnaDEgPDwgY29yZV9hZGRyWzE6MF07CisgICAgICAgICAgICBTQ1IxX01FTV9XSURUSF9IV09SRDogIHdzdHJiID0gNCdoMyA8PCBjb3JlX2FkZHJbMTowXTsKKyAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiAgd3N0cmIgPSA0J2hmIDw8IGNvcmVfYWRkclsxOjBdOworICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICB3c3RyYiA9ICd4OworICAgICAgICBlbmRjYXNlCisgICAgZWxzZQorICAgICAgICBjYXNlIChyZXFfZmlmb1tyZXFfcHJvY19wdHJdLmF4aV93aWR0aCkKKyAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX0JZVEUgOiAgd3N0cmIgPSA0J2gxIDw8IHJlcV9maWZvW3JlcV9wcm9jX3B0cl0uYXhpX2FkZHJbMTowXTsKKyAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX0hXT1JEOiAgd3N0cmIgPSA0J2gzIDw8IHJlcV9maWZvW3JlcV9wcm9jX3B0cl0uYXhpX2FkZHJbMTowXTsKKyAgICAgICAgICAgIFNDUjFfTUVNX1dJRFRIX1dPUkQgOiAgd3N0cmIgPSA0J2hmIDw8IHJlcV9maWZvW3JlcV9wcm9jX3B0cl0uYXhpX2FkZHJbMTowXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgd3N0cmIgPSAneDsKKyAgICAgICAgZW5kY2FzZQorZW5kCisKKworCithc3NpZ24gd2RhdGEgPSAoZm9yY2Vfd3JpdGUpPyAgICAgICAgICAgICAgICAgICAgICAgY29yZV93ZGF0YSA8PCAoOCogICAgICAgICAgICAgICAgICAgICAgIGNvcmVfYWRkclsxOjBdKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFfZmlmb1tyZXFfcHJvY19wdHJdLmF4aV93ZGF0YSA8PCAoOCogcmVxX2ZpZm9bcmVxX3Byb2NfcHRyXS5heGlfYWRkclsxOjBdKTsKKworCisvLyBSZWFkIGRhdGEgYWRhcHRhdGlvbgorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICBjYXNlIChyZXFfZmlmb1tyZXFfZG9uZV9wdHJdLmF4aV93aWR0aCkKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfQllURSA6ICByY3ZkX3JkYXRhID0gcmRhdGEgPj4gKDgqcmVxX2ZpZm9bcmVxX2RvbmVfcHRyXS5heGlfYWRkclsxOjBdKTsKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQ6ICByY3ZkX3JkYXRhID0gcmRhdGEgPj4gKDgqcmVxX2ZpZm9bcmVxX2RvbmVfcHRyXS5heGlfYWRkclsxOjBdKTsKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfV09SRCA6ICByY3ZkX3JkYXRhID0gcmRhdGEgPj4gKDgqcmVxX2ZpZm9bcmVxX2RvbmVfcHRyXS5heGlfYWRkclsxOjBdKTsKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICByY3ZkX3JkYXRhID0gJ3g7CisgICAgZW5kY2FzZQorZW5kCisKKworZ2VuZXJhdGUKKyAgICBpZiAoU0NSMV9BWElfUkVTUF9CUCA9PSAxKSBiZWdpbiA6IGF4aV9yZXNwX2JwCisgICAgICAgIGFzc2lnbiBjb3JlX3JkYXRhID0gKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSA/IHJjdmRfcmRhdGEgOiAnMDsKKyAgICAgICAgYXNzaWduIGNvcmVfcmVzcCAgPSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKKyAgICBlbmQgZWxzZSBiZWdpbiA6IGF4aV9yZXNwX25vX2JwCisgICAgICAgIGFsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgICAgICAgaWYgKH5yc3RfbikgICAgICAgICAgICAgIGNvcmVfcmVzcCAgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7CisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgY29yZV9yZXNwICA8PSAoYXhpX3JlaW5pdCkgPyBTQ1IxX01FTV9SRVNQX05PVFJEWSA6IHJjdmRfcmVzcDsKKyAgICAgICAgZW5kCisgICAgICAgIGFsd2F5c19mZiBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgICAgICAgaWYgKHJ2YWxpZCAmIHJyZWFkeSAmIHJsYXN0KSBjb3JlX3JkYXRhIDw9IHJjdmRfcmRhdGE7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kZ2VuZXJhdGUKKworCisKKy8vIEFYSSBpbnRlcmZhY2UgYXNzaWdubWVudHMKK2Fzc2lnbiBhd2lkICAgICA9IFNDUjFfQVhJX0lEV0lEVEgnKDEpOworYXNzaWduIGF3bGVuICAgID0gOCdkMDsKK2Fzc2lnbiBhd3NpemUgICA9IChmb3JjZV93cml0ZSkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9bcmVxX3Byb2NfcHRyXS5heGlfd2lkdGgpOworYXNzaWduIGF3YnVyc3QgID0gMidkMTsKK2Fzc2lnbiBhd2NhY2hlICA9IDQnZDI7Cithc3NpZ24gYXdsb2NrICAgPSAnMDsKK2Fzc2lnbiBhd3Byb3QgICA9ICcwOworYXNzaWduIGF3cmVnaW9uID0gJzA7Cithc3NpZ24gYXd1c2VyICAgPSAnMDsKK2Fzc2lnbiBhd3FvcyAgICA9ICcwOworCithc3NpZ24gYXJpZCAgICAgPSBTQ1IxX0FYSV9JRFdJRFRIJygwKTsKK2Fzc2lnbiBhcmxlbiAgICA9IDgnZDA7Cithc3NpZ24gYXJzaXplICAgPSAoZm9yY2VfcmVhZCkgPyB3aWR0aDJheHNpemUoY29yZV93aWR0aCkgOiB3aWR0aDJheHNpemUocmVxX2ZpZm9bcmVxX3Byb2NfcHRyXS5heGlfd2lkdGgpOworYXNzaWduIGFyYnVyc3QgID0gMidkMTsKK2Fzc2lnbiBhcmNhY2hlICA9IDQnZDI7Cithc3NpZ24gYXJwcm90ICAgPSAnMDsKK2Fzc2lnbiBhcnJlZ2lvbiA9ICcwOworYXNzaWduIGFybG9jayAgID0gJzA7Cithc3NpZ24gYXJxb3MgICAgPSAnMDsKK2Fzc2lnbiBhcnVzZXIgICA9ICcwOworCithc3NpZ24gd2xhc3QgICAgPSAxJ2QxOworYXNzaWduIHd1c2VyICAgID0gJzA7CisKKworYGlmZGVmIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2VydGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFggY2hlY2tzCitTQ1IxX1NWQV9BWElfWF9DSEVDSzAgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgICEkaXN1bmtub3duKHtjb3JlX3JlcSwgYXdyZWFkeSwgd3JlYWR5LCBidmFsaWQsIGFycmVhZHksIHJ2YWxpZH0pICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKK1NDUjFfU1ZBX0FYSV9YX0NIRUNLMSAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgY29yZV9yZXEgfC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJGlzdW5rbm93bih7Y29yZV9jbWQsIGNvcmVfd2lkdGgsIGNvcmVfYWRkcn0pICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkZXJyb3IoIkFYSSBicmlkZ2U6IFggc3RhdGUgb24gaW5wdXQiKTsKK1NDUjFfU1ZBX0FYSV9YX0NIRUNLMiAgOiBhc3NlcnQgcHJvcGVydHkgKEAobmVnZWRnZSBjbGspIGRpc2FibGUgaWZmICh+cnN0X24pICAgYnZhbGlkIHwtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISRpc3Vua25vd24oe2JpZCwgYnJlc3B9KSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGVycm9yKCJBWEkgYnJpZGdlOiBYIHN0YXRlIG9uIGlucHV0Iik7CitTQ1IxX1NWQV9BWElfWF9DSEVDSzMgIDogYXNzZXJ0IHByb3BlcnR5IChAKG5lZ2VkZ2UgY2xrKSBkaXNhYmxlIGlmZiAofnJzdF9uKSAgIHJ2YWxpZCB8LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkaXN1bmtub3duKHtyaWQsIHJyZXNwfSkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICRlcnJvcigiQVhJIGJyaWRnZTogWCBzdGF0ZSBvbiBpbnB1dCIpOworYGVuZGlmIC8vIFNDUjFfVFJHVF9TSU1VTEFUSU9OCisKK2VuZG1vZHVsZSA6IHNjcjFfbWVtX2F4aQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90Y20uc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczNzZjZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90Y20uc3YKQEAgLTAsMCArMSwxMzEgQEAKKy8vLyBDb3B5cmlnaHQgYnkgU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjAuIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzCisvLy8gQGZpbGUgICAgICAgPHNjcjFfdGNtLnN2PgorLy8vIEBicmllZiAgICAgIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkgKFRDTSkKKy8vLworCitgaW5jbHVkZSAic2NyMV9tZW1pZi5zdmgiCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKKworYGlmZGVmIFNDUjFfVENNX0VOCittb2R1bGUgc2NyMV90Y20KKyMoCisgICAgcGFyYW1ldGVyIFNDUjFfVENNX1NJWkUgPSBgU0NSMV9JTUVNX0FXSURUSCdoMDAwMTAwMDAKKykKKygKKyAgICAvLyBDb250cm9sIHNpZ25hbHMKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworICAgIC8vIENvcmUgaW5zdHJ1Y3Rpb24gaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxX2FjaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9yZXEsCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfSU1FTV9BV0lEVEgtMTowXSAgIGltZW1fYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljIFtgU0NSMV9JTUVNX0RXSURUSC0xOjBdICAgaW1lbV9yZGF0YSwKKyAgICBvdXRwdXQgIHR5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgaW1lbV9yZXNwLAorCisgICAgLy8gQ29yZSBkYXRhIGludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX3JlcV9hY2ssCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICBkbWVtX2NtZCwKKyAgICBpbnB1dCAgIHR5cGVfc2NyMV9tZW1fd2lkdGhfZSAgICAgICAgICAgZG1lbV93aWR0aCwKKyAgICBpbnB1dCAgIGxvZ2ljIFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgZG1lbV9hZGRyLAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBkbWVtX3dkYXRhLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICBkbWVtX3JkYXRhLAorICAgIG91dHB1dCAgdHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICBkbWVtX3Jlc3AKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1fcmVxX2VuOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfZW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX3JkOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fd3I7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICBkbWVtX3dyaXRlZGF0YTsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgIGRtZW1fcmRhdGFfbG9jYWw7Citsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2J5dGVlbjsKK2xvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmRhdGFfc2hpZnRfcmVnOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb3JlIGludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gaW1lbV9yZXFfZW4gPSAoaW1lbV9yZXNwID09IFNDUjFfTUVNX1JFU1BfUkRZX09LKSBeIGltZW1fcmVxOworYXNzaWduIGRtZW1fcmVxX2VuID0gKGRtZW1fcmVzcCA9PSBTQ1IxX01FTV9SRVNQX1JEWV9PSykgXiBkbWVtX3JlcTsKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgaW1lbV9yZXNwIDw9IFNDUjFfTUVNX1JFU1BfTk9UUkRZOworICAgIGVuZCBlbHNlIGlmIChpbWVtX3JlcV9lbikgYmVnaW4KKyAgICAgICAgaW1lbV9yZXNwIDw9IGltZW1fcmVxID8gU0NSMV9NRU1fUkVTUF9SRFlfT0sgOiBTQ1IxX01FTV9SRVNQX05PVFJEWTsKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBkbWVtX3Jlc3AgPD0gU0NSMV9NRU1fUkVTUF9OT1RSRFk7CisgICAgZW5kIGVsc2UgaWYgKGRtZW1fcmVxX2VuKSBiZWdpbgorICAgICAgICBkbWVtX3Jlc3AgPD0gZG1lbV9yZXEgPyBTQ1IxX01FTV9SRVNQX1JEWV9PSyA6IFNDUjFfTUVNX1JFU1BfTk9UUkRZOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBpbWVtX3JlcV9hY2sgPSAxJ2IxOworYXNzaWduIGRtZW1fcmVxX2FjayA9IDEnYjE7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1lbW9yeSBkYXRhIGNvbXBvc2luZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gaW1lbV9yZCAgPSBpbWVtX3JlcTsKK2Fzc2lnbiBkbWVtX3JkICA9IGRtZW1fcmVxICYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9SRCk7Cithc3NpZ24gZG1lbV93ciAgPSBkbWVtX3JlcSAmIChkbWVtX2NtZCA9PSBTQ1IxX01FTV9DTURfV1IpOworCithbHdheXNfY29tYiBiZWdpbgorICAgIGRtZW1fd3JpdGVkYXRhID0gZG1lbV93ZGF0YTsKKyAgICBkbWVtX2J5dGVlbiAgICA9IDQnYjExMTE7CisgICAgY2FzZSAoIGRtZW1fd2lkdGggKQorICAgICAgICBTQ1IxX01FTV9XSURUSF9CWVRFIDogYmVnaW4KKyAgICAgICAgICAgIGRtZW1fd3JpdGVkYXRhICA9IHsoYFNDUjFfRE1FTV9EV0lEVEggLyAgOCl7ZG1lbV93ZGF0YVs3OjBdfX07CisgICAgICAgICAgICBkbWVtX2J5dGVlbiAgICAgPSA0J2IwMDAxIDw8IGRtZW1fYWRkclsxOjBdOworICAgICAgICBlbmQKKyAgICAgICAgU0NSMV9NRU1fV0lEVEhfSFdPUkQgOiBiZWdpbgorICAgICAgICAgICAgZG1lbV93cml0ZWRhdGEgID0geyhgU0NSMV9ETUVNX0RXSURUSCAvIDE2KXtkbWVtX3dkYXRhWzE1OjBdfX07CisgICAgICAgICAgICBkbWVtX2J5dGVlbiAgICAgPSA0J2IwMDExIDw8IHtkbWVtX2FkZHJbMV0sIDEnYjB9OworICAgICAgICBlbmQKKyAgICAgICAgZGVmYXVsdCA6IGJlZ2luCisgICAgICAgIGVuZAorICAgIGVuZGNhc2UKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNZW1vcnkgaW5zdGFudGlhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX2RwX21lbW9yeSAjKAorICAgIC5TQ1IxX1dJRFRIICggMzIgICAgICAgICAgICApLAorICAgIC5TQ1IxX1NJWkUgICggU0NSMV9UQ01fU0laRSApCispIGlfZHBfbWVtb3J5ICgKKyAgICAuY2xrICAgICggY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgIC8vIEluc3RydWN0aW9uIHBvcnQKKyAgICAvLyBQb3J0IEEKKyAgICAucmVuYSAgICggaW1lbV9yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgIC5hZGRyYSAgKCBpbWVtX2FkZHJbJGNsb2cyKFNDUjFfVENNX1NJWkUpLTE6Ml0gICksCisgICAgLnFhICAgICAoIGltZW1fcmRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAvLyBEYXRhIHBvcnQKKyAgICAvLyBQb3J0IEIKKyAgICAucmVuYiAgICggZG1lbV9yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgIC53ZW5iICAgKCBkbWVtX3dyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgLndlYmIgICAoIGRtZW1fYnl0ZWVuICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAuYWRkcmIgICggZG1lbV9hZGRyWyRjbG9nMihTQ1IxX1RDTV9TSVpFKS0xOjJdICApLAorICAgIC5xYiAgICAgKCBkbWVtX3JkYXRhX2xvY2FsICAgICAgICAgICAgICAgICAgICAgICksCisgICAgLmRhdGFiICAoIGRtZW1fd3JpdGVkYXRhICAgICAgICAgICAgICAgICAgICAgICAgKQorKTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGF0YSBtZW1vcnkgb3V0cHV0IGdlbmVyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKGRtZW1fcmQpIGJlZ2luCisgICAgICAgIGRtZW1fcmRhdGFfc2hpZnRfcmVnIDw9IGRtZW1fYWRkclsxOjBdOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiBkbWVtX3JkYXRhID0gZG1lbV9yZGF0YV9sb2NhbCA+PiAoIDggKiBkbWVtX3JkYXRhX3NoaWZ0X3JlZyApOworCitlbmRtb2R1bGUgOiBzY3IxX3RjbQorCitgZW5kaWYgLy8gU0NSMV9UQ01fRU4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90aW1lci5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90aW1lci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNhOTNhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlX3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2CkBAIC0wLDAgKzEsMjcxIEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RpbWVyLnN2PgorLy8vIEBicmllZiAgICAgIE1lbW9yeS1tYXBwZWQgVGltZXIKKy8vLworCitgaW5jbHVkZSAic2NyMV9hcmNoX2Rlc2NyaXB0aW9uLnN2aCIKK2BpbmNsdWRlICJzY3IxX21lbWlmLnN2aCIKKworbW9kdWxlIHNjcjFfdGltZXIgKAorICAgIC8vIENvbW1vbgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNfY2xrLAorCisgICAgLy8gTWVtb3J5IGludGVyZmFjZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgIGRtZW1fY21kLAorICAgIGlucHV0ICAgdHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgIGRtZW1fd2lkdGgsCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgZG1lbV9hZGRyLAorICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW1fd2RhdGEsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXFfYWNrLAorICAgIG91dHB1dCAgbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgIGRtZW1fcmRhdGEsCisgICAgb3V0cHV0ICB0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgZG1lbV9yZXNwLAorCisgICAgLy8gVGltZXIgaW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2lycQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBwYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfVElNRVJfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDU7Citsb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX0NPTlRST0wgICAgICAgICAgICAgPSA1J2gwOworbG9jYWxwYXJhbSBsb2dpYyBbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0gU0NSMV9USU1FUl9ESVZJREVSICAgICAgICAgICAgID0gNSdoNDsKK2xvY2FscGFyYW0gbG9naWMgW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdIFNDUjFfVElNRVJfTVRJTUVMTyAgICAgICAgICAgICA9IDUnaDg7Citsb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX01USU1FSEkgICAgICAgICAgICAgPSA1J2hDOworbG9jYWxwYXJhbSBsb2dpYyBbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6MF0gU0NSMV9USU1FUl9NVElNRUNNUExPICAgICAgICAgID0gNSdoMTA7Citsb2NhbHBhcmFtIGxvZ2ljIFtTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMTowXSBTQ1IxX1RJTUVSX01USU1FQ01QSEkgICAgICAgICAgPSA1J2gxNDsKKworbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9USU1FUl9DT05UUk9MX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfVElNRVJfQ09OVFJPTF9DTEtTUkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICA9IDE7Citsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBzaWduYWxzIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZV9yZWc7Citsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVfbmV3OworbG9naWMgWzYzOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lY21wX3JlZzsKK2xvZ2ljIFs2MzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWNtcF9uZXc7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZW47Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfY2xrc3JjX3J0YzsKK2xvZ2ljIFtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICB0aW1lcl9kaXY7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sX3VwOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXJfdXA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVsb191cDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZWhpX3VwOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10aW1lY21wbG9fdXA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWVjbXBoaV91cDsKKworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1fcmVxX3ZhbGlkOworCitsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX3N5bmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2V4dF9wdWxzZTsKK2xvZ2ljIFtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXSAgICAgICAgICAgICAgICB0aW1lY2xrX2NudDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lY2xrX2NudF9lbjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3Bvc2VkZ2U7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9jbXBfZmxhZzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDT05UUk9MCithbHdheXNfZmYgQChwb3NlZGdlIGNsaywgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICB0aW1lcl9lbiAgICAgICAgICAgIDw9IDEnYjE7CisgICAgICAgIHRpbWVyX2Nsa3NyY19ydGMgICAgPD0gMSdiMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoY29udHJvbF91cCkgYmVnaW4KKyAgICAgICAgICAgIHRpbWVyX2VuICAgICAgICAgICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0NPTlRST0xfRU5fT0ZGU0VUXTsKKyAgICAgICAgICAgIHRpbWVyX2Nsa3NyY19ydGMgICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0NPTlRST0xfQ0xLU1JDX09GRlNFVF07CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKKy8vIERJVklERVIKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHRpbWVyX2RpdiAgIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmIChkaXZpZGVyX3VwKSBiZWdpbgorICAgICAgICAgICAgdGltZXJfZGl2ICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8gTVRJTUUKK2Fzc2lnbiB0aW1lX3Bvc2VkZ2UgPSAodGltZWNsa19jbnRfZW4gJiAodGltZWNsa19jbnQgPT0gMCkpOworCithbHdheXNfY29tYiBiZWdpbgorICAgIG10aW1lX25ldyAgID0gbXRpbWVfcmVnOworICAgIGlmICh0aW1lX3Bvc2VkZ2UpIGJlZ2luCisgICAgICAgIG10aW1lX25ldyAgID0gbXRpbWVfcmVnICsgMSdiMTsKKyAgICBlbmQKKyAgICBpZiAobXRpbWVsb191cCkgYmVnaW4KKyAgICAgICAgbXRpbWVfbmV3WzMxOjBdICAgICA9IGRtZW1fd2RhdGE7CisgICAgZW5kCisgICAgaWYgKG10aW1laGlfdXApIGJlZ2luCisgICAgICAgIG10aW1lX25ld1s2MzozMl0gICAgPSBkbWVtX3dkYXRhOworICAgIGVuZAorZW5kCisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIG10aW1lX3JlZyAgIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmICh0aW1lX3Bvc2VkZ2UgfCBtdGltZWxvX3VwIHwgbXRpbWVoaV91cCkgYmVnaW4KKyAgICAgICAgICAgIG10aW1lX3JlZyAgIDw9IG10aW1lX25ldzsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8gTVRJTUVDTVAKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgbXRpbWVjbXBfbmV3ICAgID0gbXRpbWVjbXBfcmVnOworICAgIGlmIChtdGltZWNtcGxvX3VwKSBiZWdpbgorICAgICAgICBtdGltZWNtcF9uZXdbMzE6MF0gID0gZG1lbV93ZGF0YTsKKyAgICBlbmQKKyAgICBpZiAobXRpbWVjbXBoaV91cCkgYmVnaW4KKyAgICAgICAgbXRpbWVjbXBfbmV3WzYzOjMyXSA9IGRtZW1fd2RhdGE7CisgICAgZW5kCitlbmQKKworYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGssIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgbXRpbWVjbXBfcmVnICAgIDw9ICcwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmIChtdGltZWNtcGxvX3VwIHwgbXRpbWVjbXBoaV91cCkgYmVnaW4KKyAgICAgICAgICAgIG10aW1lY21wX3JlZyAgICA8PSBtdGltZWNtcF9uZXc7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJydXB0IHBlbmRpbmcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIHRpbWVfY21wX2ZsYWcgPSAobXRpbWVfcmVnID49ICgobXRpbWVjbXBsb191cCB8IG10aW1lY21waGlfdXApID8gbXRpbWVjbXBfbmV3IDogbXRpbWVjbXBfcmVnKSk7CisKK2Fsd2F5c19mZiBAKHBvc2VkZ2UgY2xrLCBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIHRpbWVyX2lycSAgIDw9IDEnYjA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKH50aW1lcl9pcnEpIGJlZ2luCisgICAgICAgICAgICB0aW1lcl9pcnEgICA8PSB0aW1lX2NtcF9mbGFnOworICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyAxJ2IxCisgICAgICAgICAgICBpZiAobXRpbWVjbXBsb191cCB8IG10aW1lY21waGlfdXApIGJlZ2luCisgICAgICAgICAgICAgICAgdGltZXJfaXJxICAgPD0gdGltZV9jbXBfZmxhZzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRpbWVyIGRpdmlkZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIHRpbWVjbGtfY250X2VuICAgPSAofnRpbWVyX2Nsa3NyY19ydGMgPyAxJ2IxIDogcnRjX2V4dF9wdWxzZSkgJiB0aW1lcl9lbjsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSByc3RfbiwgcG9zZWRnZSBjbGspIGJlZ2luCisgICAgaWYgKH5yc3RfbikgYmVnaW4KKyAgICAgICAgdGltZWNsa19jbnQgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgY2FzZSAoMSdiMSkKKyAgICAgICAgICAgIGRpdmlkZXJfdXAgICAgICA6IHRpbWVjbGtfY250ICAgPD0gZG1lbV93ZGF0YVtTQ1IxX1RJTUVSX0RJVklERVJfV0lEVEgtMTowXTsKKyAgICAgICAgICAgIHRpbWVfcG9zZWRnZSAgICA6IHRpbWVjbGtfY250ICAgPD0gdGltZXJfZGl2OworICAgICAgICAgICAgdGltZWNsa19jbnRfZW4gIDogdGltZWNsa19jbnQgICA8PSB0aW1lY2xrX2NudCAtIDEnYjE7CisgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiBiZWdpbiBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlRDIHN5bmNocm9uaXphdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gcnRjX2V4dF9wdWxzZSAgICA9IHJ0Y19zeW5jWzNdIF4gcnRjX3N5bmNbMl07CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgcnRjX2NsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBydGNfc3luY1swXSA8PSAxJ2IwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgIGlmICh0aW1lcl9jbGtzcmNfcnRjKSBiZWdpbgorICAgICAgICAgICAgcnRjX3N5bmNbMF0gPD0gfnJ0Y19zeW5jWzBdOworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCithbHdheXNfZmYgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofnJzdF9uKSBiZWdpbgorICAgICAgICBydGNfc3luY1szOjFdICAgPD0gJzA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKHRpbWVyX2Nsa3NyY19ydGMpIGJlZ2luCisgICAgICAgICAgICBydGNfc3luY1szOjFdICAgPD0gcnRjX3N5bmNbMjowXTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNZW1vcnkgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBkbWVtX3JlcV92YWxpZCAgID0gICAoZG1lbV93aWR0aCA9PSBTQ1IxX01FTV9XSURUSF9XT1JEKSAmICh+fGRtZW1fYWRkclsxOjBdKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRtZW1fYWRkcltTQ1IxX1RJTUVSX0FERFJfV0lEVEgtMToyXSA8PSBTQ1IxX1RJTUVSX01USU1FQ01QSElbU0NSMV9USU1FUl9BRERSX1dJRFRILTE6Ml0pOworCithc3NpZ24gZG1lbV9yZXFfYWNrICAgICA9IDEnYjE7CisKK2Fsd2F5c19mZiBAKG5lZ2VkZ2UgcnN0X24sIHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgIGRtZW1fcmVzcCAgIDw9IFNDUjFfTUVNX1JFU1BfTk9UUkRZOworICAgICAgICBkbWVtX3JkYXRhICA8PSAnMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICBpZiAoZG1lbV9yZXEpIGJlZ2luCisgICAgICAgICAgICBpZiAoZG1lbV9yZXFfdmFsaWQpIGJlZ2luCisgICAgICAgICAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9SRFlfT0s7CisgICAgICAgICAgICAgICAgaWYgKGRtZW1fY21kID09IFNDUjFfTUVNX0NNRF9SRCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAoZG1lbV9hZGRyW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdKQorICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9USU1FUl9DT05UUk9MICAgICAgOiBkbWVtX3JkYXRhICAgIDw9IGBTQ1IxX0RNRU1fRFdJRFRIJyh7dGltZXJfY2xrc3JjX3J0YywgdGltZXJfZW59KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfRElWSURFUiAgICAgIDogZG1lbV9yZGF0YSAgICA8PSBgU0NSMV9ETUVNX0RXSURUSCcodGltZXJfZGl2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVMTyAgICAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZV9yZWdbMzE6MF07CisgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FSEkgICAgICA6IGRtZW1fcmRhdGEgICAgPD0gbXRpbWVfcmVnWzYzOjMyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBMTyAgIDogZG1lbV9yZGF0YSAgICA8PSBtdGltZWNtcF9yZWdbMzE6MF07CisgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FQ01QSEkgICA6IGRtZW1fcmRhdGEgICAgPD0gbXRpbWVjbXBfcmVnWzYzOjMyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgIDogYmVnaW4gZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgZG1lbV9yZXNwICAgPD0gU0NSMV9NRU1fUkVTUF9SRFlfRVI7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIGRtZW1fcmVzcCAgIDw9IFNDUjFfTUVNX1JFU1BfTk9UUkRZOworICAgICAgICAgICAgZG1lbV9yZGF0YSAgPD0gJzA7CisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgY29udHJvbF91cCAgICAgID0gMSdiMDsKKyAgICBkaXZpZGVyX3VwICAgICAgPSAxJ2IwOworICAgIG10aW1lbG9fdXAgICAgICA9IDEnYjA7CisgICAgbXRpbWVoaV91cCAgICAgID0gMSdiMDsKKyAgICBtdGltZWNtcGxvX3VwICAgPSAxJ2IwOworICAgIG10aW1lY21waGlfdXAgICA9IDEnYjA7CisgICAgaWYgKGRtZW1fcmVxICYgZG1lbV9yZXFfdmFsaWQgJiAoZG1lbV9jbWQgPT0gU0NSMV9NRU1fQ01EX1dSKSkgYmVnaW4KKyAgICAgICAgY2FzZSAoZG1lbV9hZGRyW1NDUjFfVElNRVJfQUREUl9XSURUSC0xOjBdKQorICAgICAgICAgICAgU0NSMV9USU1FUl9DT05UUk9MICAgICAgOiBjb250cm9sX3VwICAgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfVElNRVJfRElWSURFUiAgICAgIDogZGl2aWRlcl91cCAgICA9IDEnYjE7CisgICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FTE8gICAgICA6IG10aW1lbG9fdXAgICAgPSAxJ2IxOworICAgICAgICAgICAgU0NSMV9USU1FUl9NVElNRUhJICAgICAgOiBtdGltZWhpX3VwICAgID0gMSdiMTsKKyAgICAgICAgICAgIFNDUjFfVElNRVJfTVRJTUVDTVBMTyAgIDogbXRpbWVjbXBsb191cCA9IDEnYjE7CisgICAgICAgICAgICBTQ1IxX1RJTUVSX01USU1FQ01QSEkgICA6IG10aW1lY21waGlfdXAgPSAxJ2IxOworICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgOiBiZWdpbiBlbmQKKyAgICAgICAgZW5kY2FzZQorICAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGltZXIgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiB0aW1lcl92YWwgICAgPSBtdGltZV9yZWc7CisKK2VuZG1vZHVsZSA6IHNjcjFfdGltZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2FoYi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90b3BfYWhiLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjhhN2QKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2FoYi5zdgpAQCAtMCwwICsxLDUxMyBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV90b3BfYWhiLnN2PgorLy8vIEBicmllZiAgICAgIFNDUjEgQUhCIHRvcAorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGluY2x1ZGUgInNjcjFfYWhiLnN2aCIKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KK2BpbmNsdWRlICJzY3IxX2lwaWMuc3ZoIgorYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorCitgaWZkZWYgU0NSMV9UQ01fRU4KKyBgZGVmaW5lIFNDUjFfSU1FTV9ST1VURVJfRU4KK2BlbmRpZiAvLyBTQ1IxX1RDTV9FTgorCittb2R1bGUgc2NyMV90b3BfYWhiICgKKyAgICAvLyBDb250cm9sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X24sICAgICAgICAgICAgLy8gUG93ZXItVXAgUmVzZXQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3RfbiwgICAgICAgICAgICAgIC8vIENQVSBSZXNldCAoQ29yZSBSZXNldCkKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZGUsICAgICAgICAgICAgICAvLyBUZXN0IG1vZGUKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JzdF9uLCAgICAgICAgICAgICAvLyBUZXN0IG1vZGUncyByZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBjbG9jaworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Y19jbGssICAgICAgICAgICAgICAgIC8vIFJlYWwtdGltZSBjbG9jaworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JzdF9uX28sICAgICAgICAgICAgLy8gRXh0ZXJuYWwgU3lzdGVtIFJlc2V0IG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgKGZvciB0aGUgcHJvY2Vzc29yIGNsdXN0ZXIncyBjb21wb25lbnRzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZXh0ZXJuYWwgU09DIChjb3VsZCBiZSB1c2VmdWwgaW4gc21hbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBTQ1ItY29yZS1jZW50cmljIFNPQ3MpKQorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZGNfcWxmeV9vLCAgICAgICAgIC8vIFN5c3RlbS10by1FeHRlcm5hbCBTT0MgUmVzZXQgRG9tYWluIENyb3NzaW5nIFF1YWxpZmllcgorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBGdXNlcworICAgIGlucHV0ICAgbG9naWMgW2BTQ1IxX1hMRU4tMTowXSAgICAgICAgICAgICAgICAgIGZ1c2VfbWhhcnRpZCwgICAgICAgICAgIC8vIEhhcnQgSUQKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfaWRjb2RlLCAgICAgICAgICAgIC8vIFRBUEMgSURDT0RFCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworICAgIC8vIElSUQorYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgIGlucHV0ICAgbG9naWMgW1NDUjFfSVJRX0xJTkVTX05VTS0xOjBdICAgICAgICAgIGlycV9saW5lcywgICAgICAgICAgICAgIC8vIElSUSBsaW5lcyB0byBJUElDCitgZWxzZSAvLyBTQ1IxX0lQSUNfRU4KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfaXJxLCAgICAgICAgICAgICAgICAvLyBFeHRlcm5hbCBJUlEgaW5wdXQKK2BlbmRpZiAvLyBTQ1IxX0lQSUNfRU4KKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0X2lycSwgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBJUlEgaW5wdXQKKworYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLy8gLS0gSlRBRyBJL0YKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnN0X24sCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNrLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcywKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGksCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkb19lbiwKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gSW5zdHJ1Y3Rpb24gTWVtb3J5IEludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHByb3QsCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9oYnVyc3QsCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1lbV9oc2l6ZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2h0cmFucywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWVtX2htYXN0bG9jaywKKyAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBpbWVtX2hhZGRyLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHJlYWR5LAorICAgIGlucHV0ICAgbG9naWMgW1NDUjFfQUhCX1dJRFRILTE6MF0gICAgICAgICAgICAgIGltZW1faHJkYXRhLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZW1faHJlc3AsCisKKyAgICAvLyBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hwcm90LAorICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faGJ1cnN0LAorICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtZW1faHNpemUsCisgICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9odHJhbnMsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1lbV9obWFzdGxvY2ssCisgICAgb3V0cHV0ICBsb2dpYyBbU0NSMV9BSEJfV0lEVEgtMTowXSAgICAgICAgICAgICAgZG1lbV9oYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2h3cml0ZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBkbWVtX2h3ZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hyZWFkeSwKKyAgICBpbnB1dCAgIGxvZ2ljIFtTQ1IxX0FIQl9XSURUSC0xOjBdICAgICAgICAgICAgICBkbWVtX2hyZGF0YSwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWVtX2hyZXNwCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHBhcmFtZXRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNICAgICAgICAgICAgPSAyOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHNpZ25hbCBkZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXNldCBsb2dpYworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3cnVwX3JzdF9uX3N5bmM7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX3JzdF9uX2xvY2FsOworYGlmZGVmIFNDUjFfREJHX0VOCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X247CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcTsKK3R5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fY21kOworbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVzcDsKKworLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gY29yZSB0byByb3V0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxX2FjazsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9jbWQ7Cit0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3dpZHRoOworbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93ZGF0YTsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3Jlc3A7CisKKy8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQUhCIGJyaWRnZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2ltZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX2NtZDsKK2xvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBhaGJfaW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3JkYXRhOwordHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9pbWVtX3Jlc3A7CisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBBSEIgYnJpZGdlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmVxX2FjazsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaGJfZG1lbV9yZXE7Cit0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fY21kOwordHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX3dpZHRoOworbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGFoYl9kbWVtX2FkZHI7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fd2RhdGE7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWhiX2RtZW1fcmVzcDsKKworYGlmZGVmIFNDUjFfVENNX0VOCisvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2NtZDsKK2xvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JkYXRhOwordHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3Jlc3A7CisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXFfYWNrOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcTsKK3R5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9jbWQ7Cit0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2lkdGg7Citsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fYWRkcjsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93ZGF0YTsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXNwOworYGVuZGlmIC8vIFNDUjFfVENNX0VOCisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBtZW1vcnktbWFwcGVkIHRpbWVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXFfYWNrOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fY21kOwordHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2lkdGg7Citsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2RhdGE7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3Jlc3A7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnE7Citsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUG93ZXItVXAgUmVzZXQgc3luY2hyb25pemVyCitzY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAorICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCispIGlfcHdydXBfcnN0bl9yZXNldF9zeW5jICgKKyAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAorICAgIC5yc3Rfbl9pbiAgICAgICAoMSdiMSAgICAgICAgICAgICksCisgICAgLnJzdF9uX291dCAgICAgIChwd3J1cF9yc3Rfbl9zeW5jKQorKTsKKworLy8gUmVndWxhciBSZXNldCBzeW5jaHJvbml6ZXIKK3NjcjFfcmVzZXRfc3luY19jZWxsICMoCisgICAgLlNUQUdFU19BTU9VTlQgICAgICAgKFNDUjFfQ0xVU1RFUl9UT1BfUlNUX1NZTkNfU1RBR0VTX05VTSkKKykgaV9yc3RuX3Jlc2V0X3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAorICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCisgICAgLnJzdF9uX2luICAgICAgIChyc3RfbiAgICAgICAgICAgKSwKKyAgICAucnN0X25fb3V0ICAgICAgKHJzdF9uX3N5bmMgICAgICApCispOworCisvLyBDUFUgUmVzZXQgc3luY2hyb25pemVyCitzY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAorICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCispIGlfY3B1X3JzdG5fcmVzZXRfc3luYyAoCisgICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAorICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKKyAgICAucnN0X25faW4gICAgICAgKGNwdV9yc3RfbiAgICAgICApLAorICAgIC5yc3Rfbl9vdXQgICAgICAoY3B1X3JzdF9uX3N5bmMgICkKKyk7CisKK2BpZmRlZiBTQ1IxX0RCR19FTgorLy8gVEFQQyBSZXNldAorc2NyMV9yZXNldF9hbmQyX2NlbGwgaV90YXBjX3JzdG5fYW5kMl9jZWxsICgKKyAgICAucnN0X25faW4gICAgICAgKHt0cnN0X24sIHB3cnVwX3JzdF9ufSksCisgICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAorICAgIC5yc3Rfbl9vdXQgICAgICAodGFwY190cnN0X24gICAgICkKKyk7CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTQ1IxIGNvcmUgaW5zdGFuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9jb3JlX3RvcCBpX2NvcmVfdG9wICgKKyAgICAvLyBDb21tb24KKyAgICAucHdydXBfcnN0X24gICAgICAgICAgICAgICAgKHB3cnVwX3JzdF9uX3N5bmMgKSwKKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAgICAgKHJzdF9uX3N5bmMgICAgICAgKSwKKyAgICAuY3B1X3JzdF9uICAgICAgICAgICAgICAgICAgKGNwdV9yc3Rfbl9zeW5jICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgICAgICAgICAgICAgKHRlc3RfbW9kZSAgICAgICAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgICAgICAgICAgICAgKHRlc3RfcnN0X24gICAgICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKKyAgICAuY29yZV9yc3Rfbl9vICAgICAgICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgKSwKKyAgICAuY29yZV9yZGNfcWxmeV9vICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgKSwKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIC5zeXNfcnN0X25fbyAgICAgICAgICAgICAgICAoc3lzX3JzdF9uX28gICAgICApLAorICAgIC5zeXNfcmRjX3FsZnlfbyAgICAgICAgICAgICAoc3lzX3JkY19xbGZ5X28gICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBGdXNlcworICAgIC5jb3JlX2Z1c2VfbWhhcnRpZF9pICAgICAgICAoZnVzZV9taGFydGlkICAgICApLAorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgLnRhcGNfZnVzZV9pZGNvZGVfaSAgICAgICAgIChmdXNlX2lkY29kZSAgICAgICksCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworICAgIC8vIElSUQorYGlmZGVmIFNDUjFfSVBJQ19FTgorICAgIC5jb3JlX2lycV9saW5lc19pICAgICAgICAgICAoaXJxX2xpbmVzICAgICAgICApLAorYGVsc2UgLy8gU0NSMV9JUElDX0VOCisgICAgLmNvcmVfaXJxX2V4dF9pICAgICAgICAgICAgIChleHRfaXJxICAgICAgICAgICksCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisgICAgLmNvcmVfaXJxX3NvZnRfaSAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICksCisgICAgLmNvcmVfaXJxX210aW1lcl9pICAgICAgICAgICh0aW1lcl9pcnEgICAgICAgICksCisKKyAgICAvLyBNZW1vcnktbWFwcGVkIGV4dGVybmFsIHRpbWVyCisgICAgLmNvcmVfbXRpbWVyX3ZhbF9pICAgICAgICAgICh0aW1lcl92YWwgICAgICAgICksCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIC8vIERlYnVnIGludGVyZmFjZQorICAgIC50YXBjX3Ryc3RfbiAgICAgICAgICAgICAgICAodGFwY190cnN0X24gICAgICApLAorICAgIC50YXBjX3RjayAgICAgICAgICAgICAgICAgICAodGNrICAgICAgICAgICAgICApLAorICAgIC50YXBjX3RtcyAgICAgICAgICAgICAgICAgICAodG1zICAgICAgICAgICAgICApLAorICAgIC50YXBjX3RkaSAgICAgICAgICAgICAgICAgICAodGRpICAgICAgICAgICAgICApLAorICAgIC50YXBjX3RkbyAgICAgICAgICAgICAgICAgICAodGRvICAgICAgICAgICAgICApLAorICAgIC50YXBjX3Rkb19lbiAgICAgICAgICAgICAgICAodGRvX2VuICAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlCisgICAgLmltZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2ltZW1fcmVxX2FjayksCisgICAgLmNvcmUyaW1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2ltZW1fcmVxICAgICksCisgICAgLmNvcmUyaW1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2ltZW1fY21kICAgICksCisgICAgLmNvcmUyaW1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2ltZW1fYWRkciAgICksCisgICAgLmltZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2ltZW1fcmRhdGEgICksCisgICAgLmltZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2ltZW1fcmVzcCAgICksCisKKyAgICAvLyBEYXRhIG1lbW9yeSBpbnRlcmZhY2UKKyAgICAuZG1lbTJjb3JlX3JlcV9hY2tfaSAgICAgICAgKGNvcmVfZG1lbV9yZXFfYWNrKSwKKyAgICAuY29yZTJkbWVtX3JlcV9vICAgICAgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgKSwKKyAgICAuY29yZTJkbWVtX2NtZF9vICAgICAgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgKSwKKyAgICAuY29yZTJkbWVtX3dpZHRoX28gICAgICAgICAgKGNvcmVfZG1lbV93aWR0aCAgKSwKKyAgICAuY29yZTJkbWVtX2FkZHJfbyAgICAgICAgICAgKGNvcmVfZG1lbV9hZGRyICAgKSwKKyAgICAuY29yZTJkbWVtX3dkYXRhX28gICAgICAgICAgKGNvcmVfZG1lbV93ZGF0YSAgKSwKKyAgICAuZG1lbTJjb3JlX3JkYXRhX2kgICAgICAgICAgKGNvcmVfZG1lbV9yZGF0YSAgKSwKKyAgICAuZG1lbTJjb3JlX3Jlc3BfaSAgICAgICAgICAgKGNvcmVfZG1lbV9yZXNwICAgKQorKTsKKworCitgaWZkZWYgU0NSMV9UQ01fRU4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVENNIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfdGNtICMoCisgICAgLlNDUjFfVENNX1NJWkUgIChgU0NSMV9ETUVNX0FXSURUSCcoflNDUjFfVENNX0FERFJfTUFTSyArIDEnYjEpKQorKSBpX3RjbSAoCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwpLAorCisgICAgLy8gSW5zdHJ1Y3Rpb24gaW50ZXJmYWNlIHRvIFRDTQorICAgIC5pbWVtX3JlcV9hY2sgICAodGNtX2ltZW1fcmVxX2FjayksCisgICAgLmltZW1fcmVxICAgICAgICh0Y21faW1lbV9yZXEgICAgKSwKKyAgICAuaW1lbV9hZGRyICAgICAgKHRjbV9pbWVtX2FkZHIgICApLAorICAgIC5pbWVtX3JkYXRhICAgICAodGNtX2ltZW1fcmRhdGEgICksCisgICAgLmltZW1fcmVzcCAgICAgICh0Y21faW1lbV9yZXNwICAgKSwKKworICAgIC8vIERhdGEgaW50ZXJmYWNlIHRvIFRDTQorICAgIC5kbWVtX3JlcV9hY2sgICAodGNtX2RtZW1fcmVxX2FjayksCisgICAgLmRtZW1fcmVxICAgICAgICh0Y21fZG1lbV9yZXEgICAgKSwKKyAgICAuZG1lbV9jbWQgICAgICAgKHRjbV9kbWVtX2NtZCAgICApLAorICAgIC5kbWVtX3dpZHRoICAgICAodGNtX2RtZW1fd2lkdGggICksCisgICAgLmRtZW1fYWRkciAgICAgICh0Y21fZG1lbV9hZGRyICAgKSwKKyAgICAuZG1lbV93ZGF0YSAgICAgKHRjbV9kbWVtX3dkYXRhICApLAorICAgIC5kbWVtX3JkYXRhICAgICAodGNtX2RtZW1fcmRhdGEgICksCisgICAgLmRtZW1fcmVzcCAgICAgICh0Y21fZG1lbV9yZXNwICAgKQorKTsKK2BlbmRpZiAvLyBTQ1IxX1RDTV9FTgorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWVtb3J5LW1hcHBlZCB0aW1lciBpbnN0YW5jZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3RpbWVyIGlfdGltZXIgKAorICAgIC8vIENvbW1vbgorICAgIC5yc3RfbiAgICAgICAgICAoY29yZV9yc3Rfbl9sb2NhbCAgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICksCisgICAgLnJ0Y19jbGsgICAgICAgIChydGNfY2xrICAgICAgICAgICApLAorCisgICAgLy8gTWVtb3J5IGludGVyZmFjZQorICAgIC5kbWVtX3JlcSAgICAgICAodGltZXJfZG1lbV9yZXEgICAgKSwKKyAgICAuZG1lbV9jbWQgICAgICAgKHRpbWVyX2RtZW1fY21kICAgICksCisgICAgLmRtZW1fd2lkdGggICAgICh0aW1lcl9kbWVtX3dpZHRoICApLAorICAgIC5kbWVtX2FkZHIgICAgICAodGltZXJfZG1lbV9hZGRyICAgKSwKKyAgICAuZG1lbV93ZGF0YSAgICAgKHRpbWVyX2RtZW1fd2RhdGEgICksCisgICAgLmRtZW1fcmVxX2FjayAgICh0aW1lcl9kbWVtX3JlcV9hY2spLAorICAgIC5kbWVtX3JkYXRhICAgICAodGltZXJfZG1lbV9yZGF0YSAgKSwKKyAgICAuZG1lbV9yZXNwICAgICAgKHRpbWVyX2RtZW1fcmVzcCAgICksCisKKyAgICAvLyBUaW1lciBpbnRlcmZhY2UKKyAgICAudGltZXJfdmFsICAgICAgKHRpbWVyX3ZhbCAgICAgICAgICksCisgICAgLnRpbWVyX2lycSAgICAgICh0aW1lcl9pcnEgICAgICAgICApCispOworCisKK2BpZmRlZiBTQ1IxX0lNRU1fUk9VVEVSX0VOCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc3RydWN0aW9uIG1lbW9yeSByb3V0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9pbWVtX3JvdXRlciAjKAorIGBpZmRlZiBTQ1IxX1RDTV9FTgorICAgIC5TQ1IxX0FERFJfTUFTSyAgICAgKFNDUjFfVENNX0FERFJfTUFTSyksCisgICAgLlNDUjFfQUREUl9QQVRURVJOICAoU0NSMV9UQ01fQUREUl9QQVRURVJOKQorIGBlbmRpZiAvLyBTQ1IxX1RDTV9FTgorKSBpX2ltZW1fcm91dGVyICgKKyAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgKSwKKyAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQorICAgIC5pbWVtX3JlcV9hY2sgICAoY29yZV9pbWVtX3JlcV9hY2spLAorICAgIC5pbWVtX3JlcSAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAorICAgIC5pbWVtX2NtZCAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAorICAgIC5pbWVtX2FkZHIgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAorICAgIC5pbWVtX3JkYXRhICAgICAoY29yZV9pbWVtX3JkYXRhICApLAorICAgIC5pbWVtX3Jlc3AgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAorICAgIC8vIEludGVyZmFjZSB0byBBSEIgYnJpZGdlCisgICAgLnBvcnQwX3JlcV9hY2sgIChhaGJfaW1lbV9yZXFfYWNrICksCisgICAgLnBvcnQwX3JlcSAgICAgIChhaGJfaW1lbV9yZXEgICAgICksCisgICAgLnBvcnQwX2NtZCAgICAgIChhaGJfaW1lbV9jbWQgICAgICksCisgICAgLnBvcnQwX2FkZHIgICAgIChhaGJfaW1lbV9hZGRyICAgICksCisgICAgLnBvcnQwX3JkYXRhICAgIChhaGJfaW1lbV9yZGF0YSAgICksCisgICAgLnBvcnQwX3Jlc3AgICAgIChhaGJfaW1lbV9yZXNwICAgICksCisgYGlmZGVmIFNDUjFfVENNX0VOCisgICAgLy8gSW50ZXJmYWNlIHRvIFRDTQorICAgIC5wb3J0MV9yZXFfYWNrICAodGNtX2ltZW1fcmVxX2FjayApLAorICAgIC5wb3J0MV9yZXEgICAgICAodGNtX2ltZW1fcmVxICAgICApLAorICAgIC5wb3J0MV9jbWQgICAgICAodGNtX2ltZW1fY21kICAgICApLAorICAgIC5wb3J0MV9hZGRyICAgICAodGNtX2ltZW1fYWRkciAgICApLAorICAgIC5wb3J0MV9yZGF0YSAgICAodGNtX2ltZW1fcmRhdGEgICApLAorICAgIC5wb3J0MV9yZXNwICAgICAodGNtX2ltZW1fcmVzcCAgICApCisgYGVuZGlmIC8vIFNDUjFfVENNX0VOCispOworCitgZWxzZSAvLyBTQ1IxX0lNRU1fUk9VVEVSX0VOCisKK2Fzc2lnbiBhaGJfaW1lbV9yZXEgICAgICAgICA9IGNvcmVfaW1lbV9yZXE7Cithc3NpZ24gYWhiX2ltZW1fY21kICAgICAgICAgPSBjb3JlX2ltZW1fY21kOworYXNzaWduIGFoYl9pbWVtX2FkZHIgICAgICAgID0gY29yZV9pbWVtX2FkZHI7Cithc3NpZ24gY29yZV9pbWVtX3JlcV9hY2sgICAgPSBhaGJfaW1lbV9yZXFfYWNrOworYXNzaWduIGNvcmVfaW1lbV9yZXNwICAgICAgID0gYWhiX2ltZW1fcmVzcDsKK2Fzc2lnbiBjb3JlX2ltZW1fcmRhdGEgICAgICA9IGFoYl9pbWVtX3JkYXRhOworCitgZW5kaWYgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgbWVtb3J5IHJvdXRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX2RtZW1fcm91dGVyICMoCisKK2BpZmRlZiBTQ1IxX1RDTV9FTgorICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKKyAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKFNDUjFfVENNX0FERFJfUEFUVEVSTiksCitgZWxzZSAvLyBTQ1IxX1RDTV9FTgorICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoMzInaDAwMDAwMDAwKSwKKyAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKDMyJ2hGRkZGRkZGRiksCitgZW5kaWYgLy8gU0NSMV9UQ01fRU4KKworICAgIC5TQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgICAoU0NSMV9USU1FUl9BRERSX01BU0spLAorICAgIC5TQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgICAoU0NSMV9USU1FUl9BRERSX1BBVFRFUk4pCisKKykgaV9kbWVtX3JvdXRlciAoCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCisgICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKKyAgICAuZG1lbV9yZXFfYWNrICAgKGNvcmVfZG1lbV9yZXFfYWNrICAgKSwKKyAgICAuZG1lbV9yZXEgICAgICAgKGNvcmVfZG1lbV9yZXEgICAgICAgKSwKKyAgICAuZG1lbV9jbWQgICAgICAgKGNvcmVfZG1lbV9jbWQgICAgICAgKSwKKyAgICAuZG1lbV93aWR0aCAgICAgKGNvcmVfZG1lbV93aWR0aCAgICAgKSwKKyAgICAuZG1lbV9hZGRyICAgICAgKGNvcmVfZG1lbV9hZGRyICAgICAgKSwKKyAgICAuZG1lbV93ZGF0YSAgICAgKGNvcmVfZG1lbV93ZGF0YSAgICAgKSwKKyAgICAuZG1lbV9yZGF0YSAgICAgKGNvcmVfZG1lbV9yZGF0YSAgICAgKSwKKyAgICAuZG1lbV9yZXNwICAgICAgKGNvcmVfZG1lbV9yZXNwICAgICAgKSwKK2BpZmRlZiBTQ1IxX1RDTV9FTgorICAgIC8vIEludGVyZmFjZSB0byBUQ00KKyAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9kbWVtX3JlcV9hY2sgICAgKSwKKyAgICAucG9ydDFfcmVxICAgICAgKHRjbV9kbWVtX3JlcSAgICAgICAgKSwKKyAgICAucG9ydDFfY21kICAgICAgKHRjbV9kbWVtX2NtZCAgICAgICAgKSwKKyAgICAucG9ydDFfd2lkdGggICAgKHRjbV9kbWVtX3dpZHRoICAgICAgKSwKKyAgICAucG9ydDFfYWRkciAgICAgKHRjbV9kbWVtX2FkZHIgICAgICAgKSwKKyAgICAucG9ydDFfd2RhdGEgICAgKHRjbV9kbWVtX3dkYXRhICAgICAgKSwKKyAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9kbWVtX3JkYXRhICAgICAgKSwKKyAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9kbWVtX3Jlc3AgICAgICAgKSwKK2BlbHNlIC8vIFNDUjFfVENNX0VOCisgICAgLnBvcnQxX3JlcV9hY2sgICgxJ2IwKSwKKyAgICAucG9ydDFfcmVxICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfY21kICAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfd2lkdGggICAgKCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfYWRkciAgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfd2RhdGEgICAgKCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfcmRhdGEgICAgKCcwICAgICAgICAgICAgICAgICAgKSwKKyAgICAucG9ydDFfcmVzcCAgICAgKFNDUjFfTUVNX1JFU1BfUkRZX0VSKSwKK2BlbmRpZiAvLyBTQ1IxX1RDTV9FTgorICAgIC8vIEludGVyZmFjZSB0byBtZW1vcnktbWFwcGVkIHRpbWVyCisgICAgLnBvcnQyX3JlcV9hY2sgICh0aW1lcl9kbWVtX3JlcV9hY2sgICksCisgICAgLnBvcnQyX3JlcSAgICAgICh0aW1lcl9kbWVtX3JlcSAgICAgICksCisgICAgLnBvcnQyX2NtZCAgICAgICh0aW1lcl9kbWVtX2NtZCAgICAgICksCisgICAgLnBvcnQyX3dpZHRoICAgICh0aW1lcl9kbWVtX3dpZHRoICAgICksCisgICAgLnBvcnQyX2FkZHIgICAgICh0aW1lcl9kbWVtX2FkZHIgICAgICksCisgICAgLnBvcnQyX3dkYXRhICAgICh0aW1lcl9kbWVtX3dkYXRhICAgICksCisgICAgLnBvcnQyX3JkYXRhICAgICh0aW1lcl9kbWVtX3JkYXRhICAgICksCisgICAgLnBvcnQyX3Jlc3AgICAgICh0aW1lcl9kbWVtX3Jlc3AgICAgICksCisgICAgLy8gSW50ZXJmYWNlIHRvIEFIQiBicmlkZ2UKKyAgICAucG9ydDBfcmVxX2FjayAgKGFoYl9kbWVtX3JlcV9hY2sgICAgKSwKKyAgICAucG9ydDBfcmVxICAgICAgKGFoYl9kbWVtX3JlcSAgICAgICAgKSwKKyAgICAucG9ydDBfY21kICAgICAgKGFoYl9kbWVtX2NtZCAgICAgICAgKSwKKyAgICAucG9ydDBfd2lkdGggICAgKGFoYl9kbWVtX3dpZHRoICAgICAgKSwKKyAgICAucG9ydDBfYWRkciAgICAgKGFoYl9kbWVtX2FkZHIgICAgICAgKSwKKyAgICAucG9ydDBfd2RhdGEgICAgKGFoYl9kbWVtX3dkYXRhICAgICAgKSwKKyAgICAucG9ydDBfcmRhdGEgICAgKGFoYl9kbWVtX3JkYXRhICAgICAgKSwKKyAgICAucG9ydDBfcmVzcCAgICAgKGFoYl9kbWVtX3Jlc3AgICAgICAgKQorKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfaW1lbV9haGIgaV9pbWVtX2FoYiAoCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAorICAgIC8vIEludGVyZmFjZSB0byBpbWVtIHJvdXRlcgorICAgIC5pbWVtX3JlcV9hY2sgICAoYWhiX2ltZW1fcmVxX2FjayAgICksCisgICAgLmltZW1fcmVxICAgICAgIChhaGJfaW1lbV9yZXEgICAgICAgKSwKKyAgICAuaW1lbV9hZGRyICAgICAgKGFoYl9pbWVtX2FkZHIgICAgICApLAorICAgIC5pbWVtX3JkYXRhICAgICAoYWhiX2ltZW1fcmRhdGEgICAgICksCisgICAgLmltZW1fcmVzcCAgICAgIChhaGJfaW1lbV9yZXNwICAgICAgKSwKKyAgICAvLyBBSEIgaW50ZXJmYWNlCisgICAgLmhwcm90ICAgICAgICAgIChpbWVtX2hwcm90ICAgICAgICAgKSwKKyAgICAuaGJ1cnN0ICAgICAgICAgKGltZW1faGJ1cnN0ICAgICAgICApLAorICAgIC5oc2l6ZSAgICAgICAgICAoaW1lbV9oc2l6ZSAgICAgICAgICksCisgICAgLmh0cmFucyAgICAgICAgIChpbWVtX2h0cmFucyAgICAgICAgKSwKKyAgICAuaG1hc3Rsb2NrICAgICAgKGltZW1faG1hc3Rsb2NrICAgICApLAorICAgIC5oYWRkciAgICAgICAgICAoaW1lbV9oYWRkciAgICAgICAgICksCisgICAgLmhyZWFkeSAgICAgICAgIChpbWVtX2hyZWFkeSAgICAgICAgKSwKKyAgICAuaHJkYXRhICAgICAgICAgKGltZW1faHJkYXRhICAgICAgICApLAorICAgIC5ocmVzcCAgICAgICAgICAoaW1lbV9ocmVzcCAgICAgICAgICkKKyk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEYXRhIG1lbW9yeSBBSEIgYnJpZGdlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfZG1lbV9haGIgaV9kbWVtX2FoYiAoCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICApLAorICAgIC8vIEludGVyZmFjZSB0byBkbWVtIHJvdXRlcgorICAgIC5kbWVtX3JlcV9hY2sgICAoYWhiX2RtZW1fcmVxX2FjayAgICksCisgICAgLmRtZW1fcmVxICAgICAgIChhaGJfZG1lbV9yZXEgICAgICAgKSwKKyAgICAuZG1lbV9jbWQgICAgICAgKGFoYl9kbWVtX2NtZCAgICAgICApLAorICAgIC5kbWVtX3dpZHRoICAgICAoYWhiX2RtZW1fd2lkdGggICAgICksCisgICAgLmRtZW1fYWRkciAgICAgIChhaGJfZG1lbV9hZGRyICAgICAgKSwKKyAgICAuZG1lbV93ZGF0YSAgICAgKGFoYl9kbWVtX3dkYXRhICAgICApLAorICAgIC5kbWVtX3JkYXRhICAgICAoYWhiX2RtZW1fcmRhdGEgICAgICksCisgICAgLmRtZW1fcmVzcCAgICAgIChhaGJfZG1lbV9yZXNwICAgICAgKSwKKyAgICAvLyBBSEIgaW50ZXJmYWNlCisgICAgLmhwcm90ICAgICAgICAgIChkbWVtX2hwcm90ICAgICAgICAgKSwKKyAgICAuaGJ1cnN0ICAgICAgICAgKGRtZW1faGJ1cnN0ICAgICAgICApLAorICAgIC5oc2l6ZSAgICAgICAgICAoZG1lbV9oc2l6ZSAgICAgICAgICksCisgICAgLmh0cmFucyAgICAgICAgIChkbWVtX2h0cmFucyAgICAgICAgKSwKKyAgICAuaG1hc3Rsb2NrICAgICAgKGRtZW1faG1hc3Rsb2NrICAgICApLAorICAgIC5oYWRkciAgICAgICAgICAoZG1lbV9oYWRkciAgICAgICAgICksCisgICAgLmh3cml0ZSAgICAgICAgIChkbWVtX2h3cml0ZSAgICAgICAgKSwKKyAgICAuaHdkYXRhICAgICAgICAgKGRtZW1faHdkYXRhICAgICAgICApLAorICAgIC5ocmVhZHkgICAgICAgICAoZG1lbV9ocmVhZHkgICAgICAgICksCisgICAgLmhyZGF0YSAgICAgICAgIChkbWVtX2hyZGF0YSAgICAgICAgKSwKKyAgICAuaHJlc3AgICAgICAgICAgKGRtZW1faHJlc3AgICAgICAgICApCispOworCitlbmRtb2R1bGUgOiBzY3IxX3RvcF9haGIKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2F4aS5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZV9zY3IxL3NyYy90b3Avc2NyMV90b3BfYXhpLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWI5MDIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmVfc2NyMS9zcmMvdG9wL3NjcjFfdG9wX2F4aS5zdgpAQCAtMCwwICsxLDcwMSBAQAorLy8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMC4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKKy8vLyBAZmlsZSAgICAgICA8c2NyMV90b3BfYXhpLnN2PgorLy8vIEBicmllZiAgICAgIFNDUjEgQVhJIHRvcAorLy8vCisKK2BpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgorYGluY2x1ZGUgInNjcjFfbWVtaWYuc3ZoIgorYGlmZGVmIFNDUjFfSVBJQ19FTgorYGluY2x1ZGUgInNjcjFfaXBpYy5zdmgiCitgZW5kaWYgLy8gU0NSMV9JUElDX0VOCisKK2BpZmRlZiBTQ1IxX1RDTV9FTgorIGBkZWZpbmUgU0NSMV9JTUVNX1JPVVRFUl9FTgorYGVuZGlmIC8vIFNDUjFfVENNX0VOCisKK21vZHVsZSBzY3IxX3RvcF9heGkgKAorICAgIC8vIENvbnRyb2wKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd3J1cF9yc3RfbiwgICAgICAgICAgICAvLyBQb3dlci1VcCBSZXNldAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uLCAgICAgICAgICAgICAgLy8gQ1BVIFJlc2V0IChDb3JlIFJlc2V0KQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbW9kZSwgICAgICAgICAgICAgIC8vIFRlc3QgbW9kZQorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcnN0X24sICAgICAgICAgICAgIC8vIFRlc3QgbW9kZSdzIHJlc2V0CisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIGNsb2NrCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsaywgICAgICAgICAgICAgICAgLy8gUmVhbC10aW1lIGNsb2NrCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcnN0X25fbywgICAgICAgICAgICAvLyBFeHRlcm5hbCBTeXN0ZW0gUmVzZXQgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAoZm9yIHRoZSBwcm9jZXNzb3IgY2x1c3RlcidzIGNvbXBvbmVudHMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBleHRlcm5hbCBTT0MgKGNvdWxkIGJlIHVzZWZ1bCBpbiBzbWFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIFNDUi1jb3JlLWNlbnRyaWMgU09DcykpCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3JkY19xbGZ5X28sICAgICAgICAgLy8gU3lzdGVtLXRvLUV4dGVybmFsIFNPQyBSZXNldCBEb21haW4gQ3Jvc3NpbmcgUXVhbGlmaWVyCitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworICAgIC8vIEZ1c2VzCisgICAgaW5wdXQgICBsb2dpYyBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgICAgICAgICAgZnVzZV9taGFydGlkLCAgICAgICAgICAgLy8gSGFydCBJRAorYGlmZGVmIFNDUjFfREJHX0VOCisgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzZV9pZGNvZGUsICAgICAgICAgICAgLy8gVEFQQyBJRENPREUKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gSVJRCitgaWZkZWYgU0NSMV9JUElDX0VOCisgICAgaW5wdXQgICBsb2dpYyBbU0NSMV9JUlFfTElORVNfTlVNLTE6MF0gICAgICAgICAgaXJxX2xpbmVzLCAgICAgICAgICAgICAgLy8gSVJRIGxpbmVzIHRvIElQSUMKK2BlbHNlIC8vIFNDUjFfSVBJQ19FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9pcnEsICAgICAgICAgICAgICAgIC8vIEV4dGVybmFsIElSUSBpbnB1dAorYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnRfaXJxLCAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIElSUSBpbnB1dAorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAvLyAtLSBKVEFHIEkvRgorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyc3RfbiwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2ssCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1zLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkaSwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG8sCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX2VuLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBJbnN0cnVjdGlvbiBNZW1vcnkgSW50ZXJmYWNlCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdpZCwKKyAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd2FkZHIsCisgICAgb3V0cHV0ICBsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdsZW4sCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdzaXplLAorICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3YnVyc3QsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdsb2NrLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3Y2FjaGUsCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXdwcm90LAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3cmVnaW9uLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3dXNlciwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3FvcywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hd3ZhbGlkLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2F3cmVhZHksCisgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd2RhdGEsCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3N0cmIsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd2xhc3QsCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3VzZXIsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fd3ZhbGlkLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3dyZWFkeSwKKyAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9iaWQsCisgICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYnJlc3AsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYnZhbGlkLAorICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2J1c2VyLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2JyZWFkeSwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmlkLAorICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FyYWRkciwKKyAgICBvdXRwdXQgIGxvZ2ljIFs3OjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmxlbiwKKyAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnNpemUsCisgICAgb3V0cHV0ICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJidXJzdCwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcmxvY2ssCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJjYWNoZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9hcnByb3QsCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJyZWdpb24sCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJ1c2VyLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FycW9zLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX2FydmFsaWQsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fYXJyZWFkeSwKKyAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfaW1lbV9yaWQsCisgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcmRhdGEsCisgICAgaW5wdXQgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnJlc3AsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcmxhc3QsCisgICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnVzZXIsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2ltZW1fcnZhbGlkLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9pbWVtX3JyZWFkeSwKKworICAgIC8vIERhdGEgTWVtb3J5IEludGVyZmFjZQorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3aWQsCisgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdhZGRyLAorICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3bGVuLAorICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3c2l6ZSwKKyAgICBvdXRwdXQgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2J1cnN0LAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3bG9jaywKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd2NhY2hlLAorICAgIG91dHB1dCAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2F3cHJvdCwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3JlZ2lvbiwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3VzZXIsCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXdxb3MsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXd2YWxpZCwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hd3JlYWR5LAorICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dkYXRhLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dzdHJiLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3dsYXN0LAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3d1c2VyLAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3d2YWxpZCwKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV93cmVhZHksCisgICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYmlkLAorICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2JyZXNwLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2J2YWxpZCwKKyAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9idXNlciwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9icmVhZHksCisgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJpZCwKKyAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcmFkZHIsCisgICAgb3V0cHV0ICBsb2dpYyBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJsZW4sCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJzaXplLAorICAgIG91dHB1dCAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FyYnVyc3QsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJsb2NrLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FyY2FjaGUsCisgICAgb3V0cHV0ICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fYXJwcm90LAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FycmVnaW9uLAorICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FydXNlciwKKyAgICBvdXRwdXQgIGxvZ2ljIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnFvcywKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9hcnZhbGlkLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX2FycmVhZHksCisgICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fYXhpX2RtZW1fcmlkLAorICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JkYXRhLAorICAgIGlucHV0ICAgbG9naWMgWzE6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JyZXNwLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3JsYXN0LAorICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3J1c2VyLAorICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2F4aV9kbWVtX3J2YWxpZCwKKyAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb19heGlfZG1lbV9ycmVhZHkKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgcGFyYW1ldGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0gICAgICAgICAgICA9IDI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgc2lnbmFsIGRlY2xhcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IGxvZ2ljCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdydXBfcnN0X25fc3luYzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3Rfbl9zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yc3Rfbl9zeW5jOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcnN0X25fbG9jYWw7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX3JzdF9uOworYGlmZGVmIFNDUjFfREJHX0VOCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X247CitgZW5kaWYgLy8gU0NSMV9EQkdfRU4KKworLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZSBmcm9tIGNvcmUgdG8gcm91dGVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9pbWVtX3JlcTsKK3R5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fY21kOworbG9naWMgW2BTQ1IxX0lNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfaW1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2ltZW1fcmVzcDsKKworLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlIGZyb20gY29yZSB0byByb3V0ZXIKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxX2FjazsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9jbWQ7Cit0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3dpZHRoOworbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZG1lbV93ZGF0YTsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2RtZW1fcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9kbWVtX3Jlc3A7CisKKy8vIEluc3RydWN0aW9uIG1lbW9yeSBpbnRlcmZhY2UgZnJvbSByb3V0ZXIgdG8gQVhJIGJyaWRnZQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2ltZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX2NtZDsKK2xvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICBheGlfaW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3JkYXRhOwordHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9pbWVtX3Jlc3A7CisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBBWEkgYnJpZGdlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmVxX2FjazsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV9yZXE7Cit0eXBlX3NjcjFfbWVtX2NtZF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fY21kOwordHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX3dpZHRoOworbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIGF4aV9kbWVtX2FkZHI7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fd2RhdGE7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmRhdGE7Cit0eXBlX3NjcjFfbWVtX3Jlc3BfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2RtZW1fcmVzcDsKKworYGlmZGVmIFNDUjFfVENNX0VOCisvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlIGZyb20gcm91dGVyIHRvIFRDTQorbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JlcV9hY2s7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2ltZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX2NtZDsKK2xvZ2ljIFtgU0NSMV9JTUVNX0FXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21faW1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0lNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3JkYXRhOwordHlwZV9zY3IxX21lbV9yZXNwX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9pbWVtX3Jlc3A7CisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBUQ00KK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXFfYWNrOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9kbWVtX3JlcTsKK3R5cGVfc2NyMV9tZW1fY21kX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9jbWQ7Cit0eXBlX3NjcjFfbWVtX3dpZHRoX2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fd2lkdGg7Citsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGNtX2RtZW1fYWRkcjsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV93ZGF0YTsKK2xvZ2ljIFtgU0NSMV9ETUVNX0RXSURUSC0xOjBdICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fZG1lbV9yZXNwOworYGVuZGlmIC8vIFNDUjFfVENNX0VOCisKKy8vIERhdGEgbWVtb3J5IGludGVyZmFjZSBmcm9tIHJvdXRlciB0byBtZW1vcnktbWFwcGVkIHRpbWVyCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZXFfYWNrOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fcmVxOwordHlwZV9zY3IxX21lbV9jbWRfZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fY21kOwordHlwZV9zY3IxX21lbV93aWR0aF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2lkdGg7Citsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9hZGRyOworbG9naWMgW2BTQ1IxX0RNRU1fRFdJRFRILTE6MF0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RtZW1fd2RhdGE7Citsb2dpYyBbYFNDUjFfRE1FTV9EV0lEVEgtMTowXSAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZG1lbV9yZGF0YTsKK3R5cGVfc2NyMV9tZW1fcmVzcF9lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9kbWVtX3Jlc3A7CisKKy8vIE1pc2MKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9pcnE7Citsb2dpYyBbNjM6MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdmFsOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aV9yZWluaXQ7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpX2ltZW1faWRsZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlfZG1lbV9pZGxlOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBvd2VyLVVwIFJlc2V0IHN5bmNocm9uaXplcgorc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKKyAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQorKSBpX3B3cnVwX3JzdG5fcmVzZXRfc3luYyAoCisgICAgLnJzdF9uICAgICAgICAgIChwd3J1cF9yc3RfbiAgICAgKSwKKyAgICAuY2xrICAgICAgICAgICAgKGNsayAgICAgICAgICAgICApLAorICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKKyAgICAucnN0X25faW4gICAgICAgKDEnYjEgICAgICAgICAgICApLAorICAgIC5yc3Rfbl9vdXQgICAgICAocHdydXBfcnN0X25fc3luYykKKyk7CisKKy8vIFJlZ3VsYXIgUmVzZXQgc3luY2hyb25pemVyCitzY3IxX3Jlc2V0X3N5bmNfY2VsbCAjKAorICAgIC5TVEFHRVNfQU1PVU5UICAgICAgIChTQ1IxX0NMVVNURVJfVE9QX1JTVF9TWU5DX1NUQUdFU19OVU0pCispIGlfcnN0bl9yZXNldF9zeW5jICgKKyAgICAucnN0X24gICAgICAgICAgKHB3cnVwX3JzdF9uICAgICApLAorICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgLnRlc3RfcnN0X24gICAgICh0ZXN0X3JzdF9uICAgICAgKSwKKyAgICAudGVzdF9tb2RlICAgICAgKHRlc3RfbW9kZSAgICAgICApLAorICAgIC5yc3Rfbl9pbiAgICAgICAocnN0X24gICAgICAgICAgICksCisgICAgLnJzdF9uX291dCAgICAgIChyc3Rfbl9zeW5jICAgICAgKQorKTsKKworLy8gQ1BVIFJlc2V0IHN5bmNocm9uaXplcgorc2NyMV9yZXNldF9zeW5jX2NlbGwgIygKKyAgICAuU1RBR0VTX0FNT1VOVCAgICAgICAoU0NSMV9DTFVTVEVSX1RPUF9SU1RfU1lOQ19TVEFHRVNfTlVNKQorKSBpX2NwdV9yc3RuX3Jlc2V0X3N5bmMgKAorICAgIC5yc3RfbiAgICAgICAgICAocHdydXBfcnN0X24gICAgICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAudGVzdF9yc3RfbiAgICAgKHRlc3RfcnN0X24gICAgICApLAorICAgIC50ZXN0X21vZGUgICAgICAodGVzdF9tb2RlICAgICAgICksCisgICAgLnJzdF9uX2luICAgICAgIChjcHVfcnN0X24gICAgICAgKSwKKyAgICAucnN0X25fb3V0ICAgICAgKGNwdV9yc3Rfbl9zeW5jICApCispOworCitgaWZkZWYgU0NSMV9EQkdfRU4KKy8vIFRBUEMgUmVzZXQKK3NjcjFfcmVzZXRfYW5kMl9jZWxsIGlfdGFwY19yc3RuX2FuZDJfY2VsbCAoCisgICAgLnJzdF9uX2luICAgICAgICh7dHJzdF9uLCBwd3J1cF9yc3Rfbn0pLAorICAgIC50ZXN0X3JzdF9uICAgICAodGVzdF9yc3RfbiAgICAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICh0ZXN0X21vZGUgICAgICAgKSwKKyAgICAucnN0X25fb3V0ICAgICAgKHRhcGNfdHJzdF9uICAgICApCispOworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKK2BpZmRlZiBTQ1IxX0RCR19FTgorYXNzaWduIGF4aV9yc3RfbiA9IHN5c19yc3Rfbl9vOworYGVsc2UgLy8gU0NSMV9EQkdfRU4KK2Fzc2lnbiBheGlfcnN0X24gPSByc3Rfbl9zeW5jOworYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0NSMSBjb3JlIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfY29yZV90b3AgaV9jb3JlX3RvcCAoCisgICAgLy8gQ29tbW9uCisgICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgICAgIChwd3J1cF9yc3Rfbl9zeW5jICksCisgICAgLnJzdF9uICAgICAgICAgICAgICAgICAgICAgIChyc3Rfbl9zeW5jICAgICAgICksCisgICAgLmNwdV9yc3RfbiAgICAgICAgICAgICAgICAgIChjcHVfcnN0X25fc3luYyAgICksCisgICAgLnRlc3RfbW9kZSAgICAgICAgICAgICAgICAgICh0ZXN0X21vZGUgICAgICAgICksCisgICAgLnRlc3RfcnN0X24gICAgICAgICAgICAgICAgICh0ZXN0X3JzdF9uICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCisgICAgLmNvcmVfcnN0X25fbyAgICAgICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCisgICAgLmNvcmVfcmRjX3FsZnlfbyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICksCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAuc3lzX3JzdF9uX28gICAgICAgICAgICAgICAgKHN5c19yc3Rfbl9vICAgICAgKSwKKyAgICAuc3lzX3JkY19xbGZ5X28gICAgICAgICAgICAgKHN5c19yZGNfcWxmeV9vICAgKSwKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gRnVzZXMKKyAgICAuY29yZV9mdXNlX21oYXJ0aWRfaSAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgKSwKK2BpZmRlZiBTQ1IxX0RCR19FTgorICAgIC50YXBjX2Z1c2VfaWRjb2RlX2kgICAgICAgICAoZnVzZV9pZGNvZGUgICAgICApLAorYGVuZGlmIC8vIFNDUjFfREJHX0VOCisKKyAgICAvLyBJUlEKK2BpZmRlZiBTQ1IxX0lQSUNfRU4KKyAgICAuY29yZV9pcnFfbGluZXNfaSAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgKSwKK2BlbHNlIC8vIFNDUjFfSVBJQ19FTgorICAgIC5jb3JlX2lycV9leHRfaSAgICAgICAgICAgICAoZXh0X2lycSAgICAgICAgICApLAorYGVuZGlmIC8vIFNDUjFfSVBJQ19FTgorICAgIC5jb3JlX2lycV9zb2Z0X2kgICAgICAgICAgICAoc29mdF9pcnEgICAgICAgICApLAorICAgIC5jb3JlX2lycV9tdGltZXJfaSAgICAgICAgICAodGltZXJfaXJxICAgICAgICApLAorCisgICAgLy8gTWVtb3J5LW1hcHBlZCBleHRlcm5hbCB0aW1lcgorICAgIC5jb3JlX210aW1lcl92YWxfaSAgICAgICAgICAodGltZXJfdmFsICAgICAgICApLAorCitgaWZkZWYgU0NSMV9EQkdfRU4KKyAgICAvLyBEZWJ1ZyBpbnRlcmZhY2UKKyAgICAudGFwY190cnN0X24gICAgICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgKSwKKyAgICAudGFwY190Y2sgICAgICAgICAgICAgICAgICAgKHRjayAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190bXMgICAgICAgICAgICAgICAgICAgKHRtcyAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190ZGkgICAgICAgICAgICAgICAgICAgKHRkaSAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190ZG8gICAgICAgICAgICAgICAgICAgKHRkbyAgICAgICAgICAgICAgKSwKKyAgICAudGFwY190ZG9fZW4gICAgICAgICAgICAgICAgKHRkb19lbiAgICAgICAgICAgKSwKK2BlbmRpZiAvLyBTQ1IxX0RCR19FTgorCisgICAgLy8gSW5zdHJ1Y3Rpb24gbWVtb3J5IGludGVyZmFjZQorICAgIC5pbWVtMmNvcmVfcmVxX2Fja19pICAgICAgICAoY29yZV9pbWVtX3JlcV9hY2spLAorICAgIC5jb3JlMmltZW1fcmVxX28gICAgICAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAorICAgIC5jb3JlMmltZW1fY21kX28gICAgICAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAorICAgIC5jb3JlMmltZW1fYWRkcl9vICAgICAgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAorICAgIC5pbWVtMmNvcmVfcmRhdGFfaSAgICAgICAgICAoY29yZV9pbWVtX3JkYXRhICApLAorICAgIC5pbWVtMmNvcmVfcmVzcF9pICAgICAgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAorCisgICAgLy8gRGF0YSBtZW1vcnkgaW50ZXJmYWNlCisgICAgLmRtZW0yY29yZV9yZXFfYWNrX2kgICAgICAgIChjb3JlX2RtZW1fcmVxX2FjayksCisgICAgLmNvcmUyZG1lbV9yZXFfbyAgICAgICAgICAgIChjb3JlX2RtZW1fcmVxICAgICksCisgICAgLmNvcmUyZG1lbV9jbWRfbyAgICAgICAgICAgIChjb3JlX2RtZW1fY21kICAgICksCisgICAgLmNvcmUyZG1lbV93aWR0aF9vICAgICAgICAgIChjb3JlX2RtZW1fd2lkdGggICksCisgICAgLmNvcmUyZG1lbV9hZGRyX28gICAgICAgICAgIChjb3JlX2RtZW1fYWRkciAgICksCisgICAgLmNvcmUyZG1lbV93ZGF0YV9vICAgICAgICAgIChjb3JlX2RtZW1fd2RhdGEgICksCisgICAgLmRtZW0yY29yZV9yZGF0YV9pICAgICAgICAgIChjb3JlX2RtZW1fcmRhdGEgICksCisgICAgLmRtZW0yY29yZV9yZXNwX2kgICAgICAgICAgIChjb3JlX2RtZW1fcmVzcCAgICkKKyk7CisKKworYGlmZGVmIFNDUjFfVENNX0VOCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRDTSBpbnN0YW5jZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX3RjbSAjKAorICAgIC5TQ1IxX1RDTV9TSVpFICAoYFNDUjFfRE1FTV9BV0lEVEgnKH5TQ1IxX1RDTV9BRERSX01BU0sgKyAxJ2IxKSkKKykgaV90Y20gKAorICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsKSwKKworICAgIC8vIEluc3RydWN0aW9uIGludGVyZmFjZSB0byBUQ00KKyAgICAuaW1lbV9yZXFfYWNrICAgKHRjbV9pbWVtX3JlcV9hY2spLAorICAgIC5pbWVtX3JlcSAgICAgICAodGNtX2ltZW1fcmVxICAgICksCisgICAgLmltZW1fYWRkciAgICAgICh0Y21faW1lbV9hZGRyICAgKSwKKyAgICAuaW1lbV9yZGF0YSAgICAgKHRjbV9pbWVtX3JkYXRhICApLAorICAgIC5pbWVtX3Jlc3AgICAgICAodGNtX2ltZW1fcmVzcCAgICksCisKKyAgICAvLyBEYXRhIGludGVyZmFjZSB0byBUQ00KKyAgICAuZG1lbV9yZXFfYWNrICAgKHRjbV9kbWVtX3JlcV9hY2spLAorICAgIC5kbWVtX3JlcSAgICAgICAodGNtX2RtZW1fcmVxICAgICksCisgICAgLmRtZW1fY21kICAgICAgICh0Y21fZG1lbV9jbWQgICAgKSwKKyAgICAuZG1lbV93aWR0aCAgICAgKHRjbV9kbWVtX3dpZHRoICApLAorICAgIC5kbWVtX2FkZHIgICAgICAodGNtX2RtZW1fYWRkciAgICksCisgICAgLmRtZW1fd2RhdGEgICAgICh0Y21fZG1lbV93ZGF0YSAgKSwKKyAgICAuZG1lbV9yZGF0YSAgICAgKHRjbV9kbWVtX3JkYXRhICApLAorICAgIC5kbWVtX3Jlc3AgICAgICAodGNtX2RtZW1fcmVzcCAgICkKKyk7CitgZW5kaWYgLy8gU0NSMV9UQ01fRU4KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1lbW9yeS1tYXBwZWQgdGltZXIgaW5zdGFuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV90aW1lciBpX3RpbWVyICgKKyAgICAvLyBDb21tb24KKyAgICAucnN0X24gICAgICAgICAgKGNvcmVfcnN0X25fbG9jYWwgICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICApLAorICAgIC5ydGNfY2xrICAgICAgICAocnRjX2NsayAgICAgICAgICAgKSwKKworICAgIC8vIE1lbW9yeSBpbnRlcmZhY2UKKyAgICAuZG1lbV9yZXEgICAgICAgKHRpbWVyX2RtZW1fcmVxICAgICksCisgICAgLmRtZW1fY21kICAgICAgICh0aW1lcl9kbWVtX2NtZCAgICApLAorICAgIC5kbWVtX3dpZHRoICAgICAodGltZXJfZG1lbV93aWR0aCAgKSwKKyAgICAuZG1lbV9hZGRyICAgICAgKHRpbWVyX2RtZW1fYWRkciAgICksCisgICAgLmRtZW1fd2RhdGEgICAgICh0aW1lcl9kbWVtX3dkYXRhICApLAorICAgIC5kbWVtX3JlcV9hY2sgICAodGltZXJfZG1lbV9yZXFfYWNrKSwKKyAgICAuZG1lbV9yZGF0YSAgICAgKHRpbWVyX2RtZW1fcmRhdGEgICksCisgICAgLmRtZW1fcmVzcCAgICAgICh0aW1lcl9kbWVtX3Jlc3AgICApLAorCisgICAgLy8gVGltZXIgaW50ZXJmYWNlCisgICAgLnRpbWVyX3ZhbCAgICAgICh0aW1lcl92YWwgICAgICAgICApLAorICAgIC50aW1lcl9pcnEgICAgICAodGltZXJfaXJxICAgICAgICAgKQorKTsKKworCitgaWZkZWYgU0NSMV9JTUVNX1JPVVRFUl9FTgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnN0cnVjdGlvbiBtZW1vcnkgcm91dGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfaW1lbV9yb3V0ZXIgIygKKyAgICAuU0NSMV9BRERSX01BU0sgICAgIChTQ1IxX1RDTV9BRERSX01BU0spLAorICAgIC5TQ1IxX0FERFJfUEFUVEVSTiAgKFNDUjFfVENNX0FERFJfUEFUVEVSTikKKykgaV9pbWVtX3JvdXRlciAoCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICksCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQorICAgIC5pbWVtX3JlcV9hY2sgICAoY29yZV9pbWVtX3JlcV9hY2spLAorICAgIC5pbWVtX3JlcSAgICAgICAoY29yZV9pbWVtX3JlcSAgICApLAorICAgIC5pbWVtX2NtZCAgICAgICAoY29yZV9pbWVtX2NtZCAgICApLAorICAgIC5pbWVtX2FkZHIgICAgICAoY29yZV9pbWVtX2FkZHIgICApLAorICAgIC5pbWVtX3JkYXRhICAgICAoY29yZV9pbWVtX3JkYXRhICApLAorICAgIC5pbWVtX3Jlc3AgICAgICAoY29yZV9pbWVtX3Jlc3AgICApLAorCisgICAgLy8gSW50ZXJmYWNlIHRvIEFYSSBicmlkZ2UKKyAgICAucG9ydDBfcmVxX2FjayAgKGF4aV9pbWVtX3JlcV9hY2sgKSwKKyAgICAucG9ydDBfcmVxICAgICAgKGF4aV9pbWVtX3JlcSAgICAgKSwKKyAgICAucG9ydDBfY21kICAgICAgKGF4aV9pbWVtX2NtZCAgICAgKSwKKyAgICAucG9ydDBfYWRkciAgICAgKGF4aV9pbWVtX2FkZHIgICAgKSwKKyAgICAucG9ydDBfcmRhdGEgICAgKGF4aV9pbWVtX3JkYXRhICAgKSwKKyAgICAucG9ydDBfcmVzcCAgICAgKGF4aV9pbWVtX3Jlc3AgICAgKSwKKworICAgIC8vIEludGVyZmFjZSB0byBUQ00KKyAgICAucG9ydDFfcmVxX2FjayAgKHRjbV9pbWVtX3JlcV9hY2sgKSwKKyAgICAucG9ydDFfcmVxICAgICAgKHRjbV9pbWVtX3JlcSAgICAgKSwKKyAgICAucG9ydDFfY21kICAgICAgKHRjbV9pbWVtX2NtZCAgICAgKSwKKyAgICAucG9ydDFfYWRkciAgICAgKHRjbV9pbWVtX2FkZHIgICAgKSwKKyAgICAucG9ydDFfcmRhdGEgICAgKHRjbV9pbWVtX3JkYXRhICAgKSwKKyAgICAucG9ydDFfcmVzcCAgICAgKHRjbV9pbWVtX3Jlc3AgICAgKQorKTsKKworYGVsc2UgLy8gU0NSMV9JTUVNX1JPVVRFUl9FTgorCithc3NpZ24gYXhpX2ltZW1fcmVxICAgICAgICAgPSBjb3JlX2ltZW1fcmVxOworYXNzaWduIGF4aV9pbWVtX2NtZCAgICAgICAgID0gY29yZV9pbWVtX2NtZDsKK2Fzc2lnbiBheGlfaW1lbV9hZGRyICAgICAgICA9IGNvcmVfaW1lbV9hZGRyOworYXNzaWduIGNvcmVfaW1lbV9yZXFfYWNrICAgID0gYXhpX2ltZW1fcmVxX2FjazsKK2Fzc2lnbiBjb3JlX2ltZW1fcmVzcCAgICAgICA9IGF4aV9pbWVtX3Jlc3A7Cithc3NpZ24gY29yZV9pbWVtX3JkYXRhICAgICAgPSBheGlfaW1lbV9yZGF0YTsKKworYGVuZGlmIC8vIFNDUjFfSU1FTV9ST1VURVJfRU4KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgbWVtb3J5IHJvdXRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY3IxX2RtZW1fcm91dGVyICMoCisKK2BpZmRlZiBTQ1IxX1RDTV9FTgorICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoU0NSMV9UQ01fQUREUl9NQVNLKSwKKyAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKFNDUjFfVENNX0FERFJfUEFUVEVSTiksCitgZWxzZSAvLyBTQ1IxX1RDTV9FTgorICAgIC5TQ1IxX1BPUlQxX0FERFJfTUFTSyAgICAgICAoMzInaDAwMDAwMDAwKSwKKyAgICAuU0NSMV9QT1JUMV9BRERSX1BBVFRFUk4gICAgKDMyJ2hGRkZGRkZGRiksCitgZW5kaWYgLy8gU0NSMV9UQ01fRU4KKworICAgIC5TQ1IxX1BPUlQyX0FERFJfTUFTSyAgICAgICAoU0NSMV9USU1FUl9BRERSX01BU0spLAorICAgIC5TQ1IxX1BPUlQyX0FERFJfUEFUVEVSTiAgICAoU0NSMV9USU1FUl9BRERSX1BBVFRFUk4pCisKKykgaV9kbWVtX3JvdXRlciAoCisgICAgLnJzdF9uICAgICAgICAgIChjb3JlX3JzdF9uX2xvY2FsICAgICksCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQorICAgIC5kbWVtX3JlcV9hY2sgICAoY29yZV9kbWVtX3JlcV9hY2sgICApLAorICAgIC5kbWVtX3JlcSAgICAgICAoY29yZV9kbWVtX3JlcSAgICAgICApLAorICAgIC5kbWVtX2NtZCAgICAgICAoY29yZV9kbWVtX2NtZCAgICAgICApLAorICAgIC5kbWVtX3dpZHRoICAgICAoY29yZV9kbWVtX3dpZHRoICAgICApLAorICAgIC5kbWVtX2FkZHIgICAgICAoY29yZV9kbWVtX2FkZHIgICAgICApLAorICAgIC5kbWVtX3dkYXRhICAgICAoY29yZV9kbWVtX3dkYXRhICAgICApLAorICAgIC5kbWVtX3JkYXRhICAgICAoY29yZV9kbWVtX3JkYXRhICAgICApLAorICAgIC5kbWVtX3Jlc3AgICAgICAoY29yZV9kbWVtX3Jlc3AgICAgICApLAorCitgaWZkZWYgU0NSMV9UQ01fRU4KKyAgICAvLyBJbnRlcmZhY2UgdG8gVENNCisgICAgLnBvcnQxX3JlcV9hY2sgICh0Y21fZG1lbV9yZXFfYWNrICAgICksCisgICAgLnBvcnQxX3JlcSAgICAgICh0Y21fZG1lbV9yZXEgICAgICAgICksCisgICAgLnBvcnQxX2NtZCAgICAgICh0Y21fZG1lbV9jbWQgICAgICAgICksCisgICAgLnBvcnQxX3dpZHRoICAgICh0Y21fZG1lbV93aWR0aCAgICAgICksCisgICAgLnBvcnQxX2FkZHIgICAgICh0Y21fZG1lbV9hZGRyICAgICAgICksCisgICAgLnBvcnQxX3dkYXRhICAgICh0Y21fZG1lbV93ZGF0YSAgICAgICksCisgICAgLnBvcnQxX3JkYXRhICAgICh0Y21fZG1lbV9yZGF0YSAgICAgICksCisgICAgLnBvcnQxX3Jlc3AgICAgICh0Y21fZG1lbV9yZXNwICAgICAgICksCitgZWxzZSAvLyBTQ1IxX1RDTV9FTgorICAgIC5wb3J0MV9yZXFfYWNrICAoMSdiMCAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV9yZXEgICAgICAoICAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV9jbWQgICAgICAoICAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV93aWR0aCAgICAoICAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV9hZGRyICAgICAoICAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV93ZGF0YSAgICAoICAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV9yZGF0YSAgICAoJzAgICAgICAgICAgICAgICAgICApLAorICAgIC5wb3J0MV9yZXNwICAgICAoU0NSMV9NRU1fUkVTUF9SRFlfRVIpLAorYGVuZGlmIC8vIFNDUjFfVENNX0VOCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gbWVtb3J5LW1hcHBlZCB0aW1lcgorICAgIC5wb3J0Ml9yZXFfYWNrICAodGltZXJfZG1lbV9yZXFfYWNrICApLAorICAgIC5wb3J0Ml9yZXEgICAgICAodGltZXJfZG1lbV9yZXEgICAgICApLAorICAgIC5wb3J0Ml9jbWQgICAgICAodGltZXJfZG1lbV9jbWQgICAgICApLAorICAgIC5wb3J0Ml93aWR0aCAgICAodGltZXJfZG1lbV93aWR0aCAgICApLAorICAgIC5wb3J0Ml9hZGRyICAgICAodGltZXJfZG1lbV9hZGRyICAgICApLAorICAgIC5wb3J0Ml93ZGF0YSAgICAodGltZXJfZG1lbV93ZGF0YSAgICApLAorICAgIC5wb3J0Ml9yZGF0YSAgICAodGltZXJfZG1lbV9yZGF0YSAgICApLAorICAgIC5wb3J0Ml9yZXNwICAgICAodGltZXJfZG1lbV9yZXNwICAgICApLAorCisgICAgLy8gSW50ZXJmYWNlIHRvIEFYSSBicmlkZ2UKKyAgICAucG9ydDBfcmVxX2FjayAgKGF4aV9kbWVtX3JlcV9hY2sgICAgKSwKKyAgICAucG9ydDBfcmVxICAgICAgKGF4aV9kbWVtX3JlcSAgICAgICAgKSwKKyAgICAucG9ydDBfY21kICAgICAgKGF4aV9kbWVtX2NtZCAgICAgICAgKSwKKyAgICAucG9ydDBfd2lkdGggICAgKGF4aV9kbWVtX3dpZHRoICAgICAgKSwKKyAgICAucG9ydDBfYWRkciAgICAgKGF4aV9kbWVtX2FkZHIgICAgICAgKSwKKyAgICAucG9ydDBfd2RhdGEgICAgKGF4aV9kbWVtX3dkYXRhICAgICAgKSwKKyAgICAucG9ydDBfcmRhdGEgICAgKGF4aV9kbWVtX3JkYXRhICAgICAgKSwKKyAgICAucG9ydDBfcmVzcCAgICAgKGF4aV9kbWVtX3Jlc3AgICAgICAgKQorKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjcjFfbWVtX2F4aSAjKAorYGlmZGVmIFNDUjFfSU1FTV9BWElfUkVRX0JQCisgICAgLlNDUjFfQVhJX1JFUV9CUCAgICAoMSksCitgZWxzZSAvLyBTQ1IxX0lNRU1fQVhJX1JFUV9CUAorICAgIC5TQ1IxX0FYSV9SRVFfQlAgICAgKDApLAorYGVuZGlmIC8vIFNDUjFfSU1FTV9BWElfUkVRX0JQCitgaWZkZWYgU0NSMV9JTUVNX0FYSV9SRVNQX0JQCisgICAgLlNDUjFfQVhJX1JFU1BfQlAgICAoMSkKK2BlbHNlIC8vIFNDUjFfSU1FTV9BWElfUkVTUF9CUAorICAgIC5TQ1IxX0FYSV9SRVNQX0JQICAgKDApCitgZW5kaWYgLy8gU0NSMV9JTUVNX0FYSV9SRVNQX0JQCispIGlfaW1lbV9heGkgKAorICAgIC5jbGsgICAgICAgICAgICAoY2xrICAgICAgICAgICAgICAgICAgICApLAorICAgIC5yc3RfbiAgICAgICAgICAoYXhpX3JzdF9uICAgICAgICAgICAgICApLAorICAgIC5heGlfcmVpbml0ICAgICAoYXhpX3JlaW5pdCAgICAgICAgICAgICApLAorCisgICAgLy8gSW50ZXJmYWNlIHRvIGNvcmUKKyAgICAuY29yZV9pZGxlICAgICAgKGF4aV9pbWVtX2lkbGUgICAgICAgICAgKSwKKyAgICAuY29yZV9yZXFfYWNrICAgKGF4aV9pbWVtX3JlcV9hY2sgICAgICAgKSwKKyAgICAuY29yZV9yZXEgICAgICAgKGF4aV9pbWVtX3JlcSAgICAgICAgICAgKSwKKyAgICAuY29yZV9jbWQgICAgICAgKGF4aV9pbWVtX2NtZCAgICAgICAgICAgKSwKKyAgICAuY29yZV93aWR0aCAgICAgKFNDUjFfTUVNX1dJRFRIX1dPUkQgICAgKSwKKyAgICAuY29yZV9hZGRyICAgICAgKGF4aV9pbWVtX2FkZHIgICAgICAgICAgKSwKKyAgICAuY29yZV93ZGF0YSAgICAgKCcwICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAuY29yZV9yZGF0YSAgICAgKGF4aV9pbWVtX3JkYXRhICAgICAgICAgKSwKKyAgICAuY29yZV9yZXNwICAgICAgKGF4aV9pbWVtX3Jlc3AgICAgICAgICAgKSwKKworICAgIC8vIEFYSSBJL08KKyAgICAuYXdpZCAgICAgICAgICAgKGlvX2F4aV9pbWVtX2F3aWQgICAgICAgKSwKKyAgICAuYXdhZGRyICAgICAgICAgKGlvX2F4aV9pbWVtX2F3YWRkciAgICAgKSwKKyAgICAuYXdsZW4gICAgICAgICAgKGlvX2F4aV9pbWVtX2F3bGVuICAgICAgKSwKKyAgICAuYXdzaXplICAgICAgICAgKGlvX2F4aV9pbWVtX2F3c2l6ZSAgICAgKSwKKyAgICAuYXdidXJzdCAgICAgICAgKGlvX2F4aV9pbWVtX2F3YnVyc3QgICAgKSwKKyAgICAuYXdsb2NrICAgICAgICAgKGlvX2F4aV9pbWVtX2F3bG9jayAgICAgKSwKKyAgICAuYXdjYWNoZSAgICAgICAgKGlvX2F4aV9pbWVtX2F3Y2FjaGUgICAgKSwKKyAgICAuYXdwcm90ICAgICAgICAgKGlvX2F4aV9pbWVtX2F3cHJvdCAgICAgKSwKKyAgICAuYXdyZWdpb24gICAgICAgKGlvX2F4aV9pbWVtX2F3cmVnaW9uICAgKSwKKyAgICAuYXd1c2VyICAgICAgICAgKGlvX2F4aV9pbWVtX2F3dXNlciAgICAgKSwKKyAgICAuYXdxb3MgICAgICAgICAgKGlvX2F4aV9pbWVtX2F3cW9zICAgICAgKSwKKyAgICAuYXd2YWxpZCAgICAgICAgKGlvX2F4aV9pbWVtX2F3dmFsaWQgICAgKSwKKyAgICAuYXdyZWFkeSAgICAgICAgKGlvX2F4aV9pbWVtX2F3cmVhZHkgICAgKSwKKyAgICAud2RhdGEgICAgICAgICAgKGlvX2F4aV9pbWVtX3dkYXRhICAgICAgKSwKKyAgICAud3N0cmIgICAgICAgICAgKGlvX2F4aV9pbWVtX3dzdHJiICAgICAgKSwKKyAgICAud2xhc3QgICAgICAgICAgKGlvX2F4aV9pbWVtX3dsYXN0ICAgICAgKSwKKyAgICAud3VzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX3d1c2VyICAgICAgKSwKKyAgICAud3ZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX3d2YWxpZCAgICAgKSwKKyAgICAud3JlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX3dyZWFkeSAgICAgKSwKKyAgICAuYmlkICAgICAgICAgICAgKGlvX2F4aV9pbWVtX2JpZCAgICAgICAgKSwKKyAgICAuYnJlc3AgICAgICAgICAgKGlvX2F4aV9pbWVtX2JyZXNwICAgICAgKSwKKyAgICAuYnZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX2J2YWxpZCAgICAgKSwKKyAgICAuYnVzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX2J1c2VyICAgICAgKSwKKyAgICAuYnJlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX2JyZWFkeSAgICAgKSwKKyAgICAuYXJpZCAgICAgICAgICAgKGlvX2F4aV9pbWVtX2FyaWQgICAgICAgKSwKKyAgICAuYXJhZGRyICAgICAgICAgKGlvX2F4aV9pbWVtX2FyYWRkciAgICAgKSwKKyAgICAuYXJsZW4gICAgICAgICAgKGlvX2F4aV9pbWVtX2FybGVuICAgICAgKSwKKyAgICAuYXJzaXplICAgICAgICAgKGlvX2F4aV9pbWVtX2Fyc2l6ZSAgICAgKSwKKyAgICAuYXJidXJzdCAgICAgICAgKGlvX2F4aV9pbWVtX2FyYnVyc3QgICAgKSwKKyAgICAuYXJsb2NrICAgICAgICAgKGlvX2F4aV9pbWVtX2FybG9jayAgICAgKSwKKyAgICAuYXJjYWNoZSAgICAgICAgKGlvX2F4aV9pbWVtX2FyY2FjaGUgICAgKSwKKyAgICAuYXJwcm90ICAgICAgICAgKGlvX2F4aV9pbWVtX2FycHJvdCAgICAgKSwKKyAgICAuYXJyZWdpb24gICAgICAgKGlvX2F4aV9pbWVtX2FycmVnaW9uICAgKSwKKyAgICAuYXJ1c2VyICAgICAgICAgKGlvX2F4aV9pbWVtX2FydXNlciAgICAgKSwKKyAgICAuYXJxb3MgICAgICAgICAgKGlvX2F4aV9pbWVtX2FycW9zICAgICAgKSwKKyAgICAuYXJ2YWxpZCAgICAgICAgKGlvX2F4aV9pbWVtX2FydmFsaWQgICAgKSwKKyAgICAuYXJyZWFkeSAgICAgICAgKGlvX2F4aV9pbWVtX2FycmVhZHkgICAgKSwKKyAgICAucmlkICAgICAgICAgICAgKGlvX2F4aV9pbWVtX3JpZCAgICAgICAgKSwKKyAgICAucmRhdGEgICAgICAgICAgKGlvX2F4aV9pbWVtX3JkYXRhICAgICAgKSwKKyAgICAucnJlc3AgICAgICAgICAgKGlvX2F4aV9pbWVtX3JyZXNwICAgICAgKSwKKyAgICAucmxhc3QgICAgICAgICAgKGlvX2F4aV9pbWVtX3JsYXN0ICAgICAgKSwKKyAgICAucnVzZXIgICAgICAgICAgKGlvX2F4aV9pbWVtX3J1c2VyICAgICAgKSwKKyAgICAucnZhbGlkICAgICAgICAgKGlvX2F4aV9pbWVtX3J2YWxpZCAgICAgKSwKKyAgICAucnJlYWR5ICAgICAgICAgKGlvX2F4aV9pbWVtX3JyZWFkeSAgICAgKQorKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgbWVtb3J5IEFYSSBicmlkZ2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV9tZW1fYXhpICMoCitgaWZkZWYgU0NSMV9ETUVNX0FYSV9SRVFfQlAKKyAgICAuU0NSMV9BWElfUkVRX0JQICAgICgxKSwKK2BlbHNlIC8vIFNDUjFfRE1FTV9BWElfUkVRX0JQCisgICAgLlNDUjFfQVhJX1JFUV9CUCAgICAoMCksCitgZW5kaWYgLy8gU0NSMV9ETUVNX0FYSV9SRVFfQlAKK2BpZmRlZiBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAKKyAgICAuU0NSMV9BWElfUkVTUF9CUCAgICgxKQorYGVsc2UgLy8gU0NSMV9ETUVNX0FYSV9SRVNQX0JQCisgICAgLlNDUjFfQVhJX1JFU1BfQlAgICAoMCkKK2BlbmRpZiAvLyBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAKKykgaV9kbWVtX2F4aSAoCisgICAgLmNsayAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICksCisgICAgLnJzdF9uICAgICAgICAgIChheGlfcnN0X24gICAgICAgICAgICAgICksCisgICAgLmF4aV9yZWluaXQgICAgIChheGlfcmVpbml0ICAgICAgICAgICAgICksCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gY29yZQorICAgIC5jb3JlX2lkbGUgICAgICAoYXhpX2RtZW1faWRsZSAgICAgICAgICApLAorICAgIC5jb3JlX3JlcV9hY2sgICAoYXhpX2RtZW1fcmVxX2FjayAgICAgICApLAorICAgIC5jb3JlX3JlcSAgICAgICAoYXhpX2RtZW1fcmVxICAgICAgICAgICApLAorICAgIC5jb3JlX2NtZCAgICAgICAoYXhpX2RtZW1fY21kICAgICAgICAgICApLAorICAgIC5jb3JlX3dpZHRoICAgICAoYXhpX2RtZW1fd2lkdGggICAgICAgICApLAorICAgIC5jb3JlX2FkZHIgICAgICAoYXhpX2RtZW1fYWRkciAgICAgICAgICApLAorICAgIC5jb3JlX3dkYXRhICAgICAoYXhpX2RtZW1fd2RhdGEgICAgICAgICApLAorICAgIC5jb3JlX3JkYXRhICAgICAoYXhpX2RtZW1fcmRhdGEgICAgICAgICApLAorICAgIC5jb3JlX3Jlc3AgICAgICAoYXhpX2RtZW1fcmVzcCAgICAgICAgICApLAorCisgICAgLy8gQVhJIEkvTworICAgIC5hd2lkICAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdpZCAgICAgICApLAorICAgIC5hd2FkZHIgICAgICAgICAoaW9fYXhpX2RtZW1fYXdhZGRyICAgICApLAorICAgIC5hd2xlbiAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdsZW4gICAgICApLAorICAgIC5hd3NpemUgICAgICAgICAoaW9fYXhpX2RtZW1fYXdzaXplICAgICApLAorICAgIC5hd2J1cnN0ICAgICAgICAoaW9fYXhpX2RtZW1fYXdidXJzdCAgICApLAorICAgIC5hd2xvY2sgICAgICAgICAoaW9fYXhpX2RtZW1fYXdsb2NrICAgICApLAorICAgIC5hd2NhY2hlICAgICAgICAoaW9fYXhpX2RtZW1fYXdjYWNoZSAgICApLAorICAgIC5hd3Byb3QgICAgICAgICAoaW9fYXhpX2RtZW1fYXdwcm90ICAgICApLAorICAgIC5hd3JlZ2lvbiAgICAgICAoaW9fYXhpX2RtZW1fYXdyZWdpb24gICApLAorICAgIC5hd3VzZXIgICAgICAgICAoaW9fYXhpX2RtZW1fYXd1c2VyICAgICApLAorICAgIC5hd3FvcyAgICAgICAgICAoaW9fYXhpX2RtZW1fYXdxb3MgICAgICApLAorICAgIC5hd3ZhbGlkICAgICAgICAoaW9fYXhpX2RtZW1fYXd2YWxpZCAgICApLAorICAgIC5hd3JlYWR5ICAgICAgICAoaW9fYXhpX2RtZW1fYXdyZWFkeSAgICApLAorICAgIC53ZGF0YSAgICAgICAgICAoaW9fYXhpX2RtZW1fd2RhdGEgICAgICApLAorICAgIC53c3RyYiAgICAgICAgICAoaW9fYXhpX2RtZW1fd3N0cmIgICAgICApLAorICAgIC53bGFzdCAgICAgICAgICAoaW9fYXhpX2RtZW1fd2xhc3QgICAgICApLAorICAgIC53dXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fd3VzZXIgICAgICApLAorICAgIC53dmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fd3ZhbGlkICAgICApLAorICAgIC53cmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fd3JlYWR5ICAgICApLAorICAgIC5iaWQgICAgICAgICAgICAoaW9fYXhpX2RtZW1fYmlkICAgICAgICApLAorICAgIC5icmVzcCAgICAgICAgICAoaW9fYXhpX2RtZW1fYnJlc3AgICAgICApLAorICAgIC5idmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fYnZhbGlkICAgICApLAorICAgIC5idXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fYnVzZXIgICAgICApLAorICAgIC5icmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fYnJlYWR5ICAgICApLAorICAgIC5hcmlkICAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJpZCAgICAgICApLAorICAgIC5hcmFkZHIgICAgICAgICAoaW9fYXhpX2RtZW1fYXJhZGRyICAgICApLAorICAgIC5hcmxlbiAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJsZW4gICAgICApLAorICAgIC5hcnNpemUgICAgICAgICAoaW9fYXhpX2RtZW1fYXJzaXplICAgICApLAorICAgIC5hcmJ1cnN0ICAgICAgICAoaW9fYXhpX2RtZW1fYXJidXJzdCAgICApLAorICAgIC5hcmxvY2sgICAgICAgICAoaW9fYXhpX2RtZW1fYXJsb2NrICAgICApLAorICAgIC5hcmNhY2hlICAgICAgICAoaW9fYXhpX2RtZW1fYXJjYWNoZSAgICApLAorICAgIC5hcnByb3QgICAgICAgICAoaW9fYXhpX2RtZW1fYXJwcm90ICAgICApLAorICAgIC5hcnJlZ2lvbiAgICAgICAoaW9fYXhpX2RtZW1fYXJyZWdpb24gICApLAorICAgIC5hcnVzZXIgICAgICAgICAoaW9fYXhpX2RtZW1fYXJ1c2VyICAgICApLAorICAgIC5hcnFvcyAgICAgICAgICAoaW9fYXhpX2RtZW1fYXJxb3MgICAgICApLAorICAgIC5hcnZhbGlkICAgICAgICAoaW9fYXhpX2RtZW1fYXJ2YWxpZCAgICApLAorICAgIC5hcnJlYWR5ICAgICAgICAoaW9fYXhpX2RtZW1fYXJyZWFkeSAgICApLAorICAgIC5yaWQgICAgICAgICAgICAoaW9fYXhpX2RtZW1fcmlkICAgICAgICApLAorICAgIC5yZGF0YSAgICAgICAgICAoaW9fYXhpX2RtZW1fcmRhdGEgICAgICApLAorICAgIC5ycmVzcCAgICAgICAgICAoaW9fYXhpX2RtZW1fcnJlc3AgICAgICApLAorICAgIC5ybGFzdCAgICAgICAgICAoaW9fYXhpX2RtZW1fcmxhc3QgICAgICApLAorICAgIC5ydXNlciAgICAgICAgICAoaW9fYXhpX2RtZW1fcnVzZXIgICAgICApLAorICAgIC5ydmFsaWQgICAgICAgICAoaW9fYXhpX2RtZW1fcnZhbGlkICAgICApLAorICAgIC5ycmVhZHkgICAgICAgICAoaW9fYXhpX2RtZW1fcnJlYWR5ICAgICApCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFYSSByZWluaXQgbG9naWMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzX2ZmIEAobmVnZWRnZSBjb3JlX3JzdF9uX2xvY2FsLCBwb3NlZGdlIGNsaykgYmVnaW4KKyAgICBpZiAofmNvcmVfcnN0X25fbG9jYWwpICAgICAgICAgICAgICAgICAgICAgIGF4aV9yZWluaXQgPD0gMSdiMTsKKyAgICBlbHNlIGlmIChheGlfaW1lbV9pZGxlICYgYXhpX2RtZW1faWRsZSkgICAgIGF4aV9yZWluaXQgPD0gMSdiMDsKK2VuZAorCitlbmRtb2R1bGUgOiBzY3IxX3RvcF9heGkK